我正在尝试取消归档特定类型的对象数组,但是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上运行良好
答案 0 :(得分:1)
我已设法通过重命名类实体来解决此问题。所有现有代码现在都按预期工作。