ios - 在这种情况下如何处理 unarchiver..?

标签 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]; 

}

我得到的异常(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 的文档在这里。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ

关于ios - 在这种情况下如何处理 unarchiver..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259030/

相关文章:

ios - 删除 Tableview NSFetchedResultsController 中的最后一节行

objective-c - iOS - 从数据库创建动态用户界面

swift - NSKeyedUnarchiver.unarchiveObject() 取消归档旧对象

swift - 如何实现 unarchiver 委托(delegate)来覆盖类名?

swift - NSKeyedUnarchiver 不适用于 Swift 3

ios - 在ios中修改Userinfo中的推送通知内容

ios - Cordova 构建 iOS 应用程序': "Could not find module ' npm-registry-client' (Node JS)

ios - 设置 Collection View 单元格的动态宽度和高度

ios - 如何 "simplify"UIImagePickerController

objective-c - 更改 NSWindow 边框颜色