我希望这与我在这里使用Mutable数组的事实无关,但是这个让我感到困惑,所以如果是这样的话我也不会感到惊讶.
背景:
我创建了一个小型数据库,它本质上是一个包含自定义对象的NSMutableArray,我们可以将其命名为recordObjects.我设置了数组:
database = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
我的自定义对象,名为"recordObject",包含以下变量和inits:
NSString *name;
int anInt;
Bool aBool;
Run Code Online (Sandbox Code Playgroud)
我也合成了方法,所以我可以拨打电话:
aString = [[database objectAtIndex:someIndex] name];
Run Code Online (Sandbox Code Playgroud)
并添加了我的控制器类的方法来添加,删除和选择要显示的各个记录.到目前为止,一切都正常,完全符合预期.
接下来,我设置了我的recordObject类(NSObject的子类)来使用NSCoder(通过包含在@interface指令中,并在实现文件中添加了以下自定义编码器和解码器方法:
-(void) encodeWithCoder: (NSCoder *) encoder {
[encoder encodeObject: name forKey: @"recordName"];
[encoder encodeInt: anInt forKey: @"recordInteger"];
[encoder encodeBool: aBool forKey: @"recordBool"];
}
-(id) initWithCoder: (NSCoder *) decoder {
name = [decoder decodeObjectForKey: @"recordName"];
anInt = [decoder decodeIntForKey: @"recordInteger"];
aBool = [decoder decodeBoolForKey: @"recordBool"];
}
Run Code Online (Sandbox Code Playgroud)
为了编写文件,我使用了以下内容:
[NSKeyedArchiver archiveRootObject:database toFile:myPath];
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,所有内容都可以正常运行.为阵列中的每个记录调用编码器方法,并将文件写入磁盘.使用TextEdit打开文件会显示数据存在(虽然对我来说几乎无法理解).
问题:
这是我陷入困境的地方.
我添加了以下代码来将文件加载到我的数据库数组中:
database = [NSKeyedUnarchiver unarchiveObjectWithFile:myPath];
Run Code Online (Sandbox Code Playgroud)
当我再次运行程序时,这次加载数据库,它的外观正常工作.我的第一个测试是使用NSMutableArray计数方法: …