我正在制作一个简单的程序,可以在启动时存档我的对象并取消存档。
我有一个 lists.m,其中名为 favouritesList 的可变数组使用存档存储到文件中。在列表中,我有一个名为 favouriteItem
的简单对象那么,问题就出在这段代码上
-(void) loadList
{
self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
if(self.favouritesList == nil)
self.favouritesList = [[NSMutableArray alloc]init];
}
我得到的异常(exception)是这个 [NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(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,我只能说 如果它返回零,我会第一次分配新的。 但是,使用 NSkeyedUnarchiver 它的工作方式有点不同...... 你能解释一下它有什么不同吗?我怎样才能避免这个错误..? 谢谢。
最佳答案
更简单的方法是使用异常处理:
@try {
self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
}
@catch ( NSException *e ) {
self.favouritesList = [[NSMutableArray alloc]init]; // add more code as needed
}
Apple 的文档在这里。
关于ios - 在这种情况下如何处理 unarchiver..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259030/