不从unarchiveObjectWithData调用initWithCoder:函数:

时间:2013-11-01 17:47:14

标签: ios objective-c persistence nskeyedarchiver nscoding

我正在尝试取消归档特定类型的对象数组,但是initWithCoder:函数不会在对象的类中执行。相反,我给出了错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SavedObject initWithCoder:]: unrecognized selector sent to instance 0x9e85f34'

现在,奇怪的是,encodeWithCoder:被调用,我能够将数据写入磁盘。然后,当尝试读回数据时,数据看起来与写入磁盘的数据完全相同。

写入磁盘:

// arrayOfObjectsToSave
NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:arrayOfObjectsToSave];
// uses NSData writeToURL - Works fine!
[self writeToDisk:arrayData];

在控制台中使用po命令,我可以确认arrayData看起来像是:

<62706c69 73743030 ... 00000000 00000288>

回读数据:

// url passed through
NSData *readBack = [self readDataFromURL:dataURL];
NSArray *persisitedArray = [NSKeyedUnarchiver unarchiveObjectWithData:readBack]

readBack数据是:

<62706c69 73743030 ... 00000000 00000288>

但是应用程序似乎在unarchiveObjectWithData:行上崩溃并出现上面的错误,但似乎甚至没有在我的班级上调用initWithCoder:

最重要的是......它在iOS 7上运行良好

1 个答案:

答案 0 :(得分:1)

我已设法通过重命名类实体来解决此问题。所有现有代码现在都按预期工作。