Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何处理这种情况。。?_Ios_Objective C_Nskeyedunarchiver - Fatal编程技术网

Ios 如何处理这种情况。。?

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

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

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

因此,这段代码出现了问题

-(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:我是指你试图在这里解压的文件,你从你的包中复制的一个空文件。与其在包中存储一个空文件并复制它,为什么不让该文件包含一个空数组?