【问题标题】:How to deal with unarchiver with this situation..?在这种情况下如何处理 unarchiver ..?
【发布时间】:2014-04-24 03:01:47
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c nskeyedunarchiver


    【解决方案1】:

    更简单的方法是使用异常处理:

    @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

    【讨论】:

    • arrayWithContentsOfFile 的情况如何??我不需要处理任何异常,因为它不会抛出任何异常?
    • @denis_choe:是的。如果您阅读unarchiveObjectWithFile:arrayWithContentsOfFile: 的文档,它们都会说明它们对空文件的反应。 NSKeyedUnarchiver 抛出异常,而 NSArray 只返回 nil。
    【解决方案2】:

    与其尝试解压缩一个空文件,不如让文件包含一个空数组?那么你就不需要任何特殊情况了。

    【讨论】:

    • 你的意思是用空数组在..哪里..?我的意思是在 viewdidload 里面?
    • @denis_choe:我的意思是您在此处尝试取消归档的文件,您从捆绑包中复制的文件是空的。为什么不让文件包含一个空数组,而不是在你的包中存储一个空文件并复制它?
    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2021-08-01
    • 1970-01-01
    相关资源
    最近更新 更多