Ios 如何处理这种情况。。?
我正在制作一个简单的程序,可以归档我的对象,并在启动时取消归档 我有一个lists.m,其中名为favoriteSlist的可变数组使用存档将其存储到文件中。在列表中,我有一个名为FavoriteItem的简单对象 因此,这段代码出现了问题Ios 如何处理这种情况。。?,ios,objective-c,nskeyedunarchiver,Ios,Objective C,Nskeyedunarchiver,我正在制作一个简单的程序,可以归档我的对象,并在启动时取消归档 我有一个lists.m,其中名为favoriteSlist的可变数组使用存档将其存储到文件中。在列表中,我有一个名为FavoriteItem的简单对象 因此,这段代码出现了问题 -(void) loadList { self.favouritesList = [[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy]; if(self.favour
-(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,我只能说
如果返回零,我将第一次分配新的。
但是,使用NSkeyedUnarchiver时,它的工作方式有点不同。。
你能解释一下它有什么不同吗?我怎样才能避免这个错误。。?
谢谢。更简单的解决方法是使用异常处理:
@try {
self.favouritesList =
[[NSKeyedUnarchiver unarchiveObjectWithFile:self.fileName] mutableCopy];
}
@catch ( NSException *e ) {
self.favouritesList = [[NSMutableArray alloc]init]; // add more code as needed
}
苹果的文档在这里
与其尝试取消归档一个空文件,不如让该文件包含一个空数组?那么您就不需要任何特殊情况。如果是arrayWithContentsOfFile,情况如何??我不需要处理任何异常,因为它不会抛出任何异常?@denis_choe:是的。如果您阅读了和的文档,它们都会说明它们对空文件的反应。NSKeyedUnarchiver抛出一个异常,NSArray只返回nil。您的意思是使该文件中的数组为空。。哪里我是说内部视图加载?@denis_choe:我是指你试图在这里解压的文件,你从你的包中复制的一个空文件。与其在包中存储一个空文件并复制它,为什么不让该文件包含一个空数组?