0

我正在制作简单的程序,可以存档我的对象并在启动时取消存档。

我有一个lists.m ,其中名为favouritesList的可变数组使用归档存储到文件中。在列表中,我有一个名为favouriteItem的简单对象

因此,此代码出现问题

-(void) loadList
{

self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
if(self.favouritesList == nil)
    self.favouritesList = [[NSMutableArray alloc]init]; 

}

我遇到的例外是这个 [NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30)'

我知道我正在使用空文件取消归档(实际上它是从同样为空的捆绑包中的文件中复制的)。

那么,当我仍然希望我的应用程序在启动时从文件中加载数据时,我该如何避免这种情况。当我用作以下代码时

-(void) loadData {
    self.URLLists = [NSMutableArray arrayWithContentsOfFile:self.path];
    if(self.URLLists == nil) {
     self.URLLists = [[NSMutableArray alloc]init];
    }

}

在这里,即使 self.path 中的文件是空的,它也会返回 nil,我可以说如果它返回 nil,我将第一次分配新的。但是,使用NSkeyedUnarchiver它的工作方式有点不同..你能解释一下它有什么不同吗?我怎样才能避免这个错误..?谢谢你。

4

2 回答 2

2

更简单的方法是使用异常处理:

@try {
            self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
     }
     @catch ( NSException *e ) {
            self.favouritesList = [[NSMutableArray alloc]init]; // add more code as needed
     }

Apple 的文档在这里。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ

于 2014-04-24T03:13:56.957 回答
0

与其尝试取消归档一个空文件,不如让该文件包含一个空数组?那么你不需要任何特殊情况。

于 2014-04-24T03:29:06.177 回答