如何处理这种情况下的unarchiver ..?

时间:2014-04-24 03:01:48

标签: ios objective-c nskeyedunarchiver

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

我有一个 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 ,它的工作方式有点不同...... 你能解释它是如何不同的,我怎么能避免这个错误..? 谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

为什么不让文件包含空数组,而不是尝试取消归档空文件?那你就不需要任何特殊情况了。