我制作了一个简单的程序,可以存档我的对象并在启动时取消归档。
我有一个 lists.m ,其中名为 favouritesList 的可变数组使用存档存储到文件中。在内部列表中,我有一个简单的对象叫做 favouriteItem
因此,此代码会出现问题
-(void) loadList
{
self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
if(self.favouritesList == nil)
self.favouritesList = [[NSMutableArray alloc]init];
}
我得到的例外就是这个 [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,我只能说 如果它返回nil,我将第一次分配新的。 但是,对于 NSkeyedUnarchiver ,它的工作方式有点不同...... 你能解释它是如何不同的,我怎么能避免这个错误..? 谢谢。
答案 0 :(得分:2)
更简单的方法是使用异常处理:
@try {
self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
}
@catch ( NSException *e ) {
self.favouritesList = [[NSMutableArray alloc]init]; // add more code as needed
}
Apple的文档就在这里。
答案 1 :(得分:0)
为什么不让文件包含空数组,而不是尝试取消归档空文件?那你就不需要任何特殊情况了。