我知道这里有很多资源但是,我找不到我的代码出了什么问题:
我有一个Level级和Level的两个子类:GameLevel和TransitionLevel。每个类都实现NSCoding协议。 然后,我有一个Level数组(所以它包含GameLevel和TransitionLevel类)。保存存档似乎工作正常:
NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
[NSKeyedArchiver archiveRootObject:levels toFile:archivePath];
请注意,level是我要保存的数组。我可以看到该文件,它已创建并且似乎包含它应包含的内容。 但是当我想要检索这个数组时:
NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
levels = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
我有这个例外:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
我不确定我在这里缺少什么。
答案 0 :(得分:1)
您的initWithCoder:
实现会返回nil
,代码的某些部分会尝试将nil
值插入数组中。
您可以进入断点导航器(⌘6)并添加异常断点。然后,当应用程序引发异常时,Debug Navigator将显示当前执行的函数和方法的堆栈。这将允许您准确了解哪个方法尝试将nil
插入到数组中。