我希望这不是做与我使用的是可变数组这里的事实,但是这一次是我莫名其妙,所以如果是这样的话它不会让我感到吃惊。
背景:
我做了一个小型的数据库基本上是包含自定义对象,我们可以称之为recordObjects一个NSMutableArray。 我设置阵列:
database = [[NSMutableArray alloc] init];
我的自定义对象,被称为“recordObject”包含以下变量和inits:
NSString *name;
int anInt;
Bool aBool;
我还合成方法,所以我可以作出这样的呼叫:
aString = [[database objectAtIndex:someIndex] name];
而添加的方法我的控制器类添加,删除,并选择单个记录进行显示。 到目前为止,一切都如预期正常工作,准确。
接下来,我已经建立了我的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"];
}
为了写入文件,我已经使用了以下情况:
[NSKeyedArchiver archiveRootObject:database toFile:myPath];
当我运行该程序,一切似乎都正常工作。 编码器方法是在阵列中要求每个记录和文件被写入磁盘。 打开文本编辑用的文件显示的数据是存在的(虽然大多不知所云给我。)
问题:
这里就是我碰到一个障碍。
我下面的代码添加到该文件加载到我的数据库数组:
database = [NSKeyedUnarchiver unarchiveObjectWithFile:myPath];
当我再次运行程序,这一次加载数据库,它似乎正常工作。 我的第一个测试是使用NSMutableArray的计数方法:
x = [database count];
其结果是,X充满了正确数量的文件中的记录。 如果有5个记录,当我保存在数据库中,X是在节目的下一次执行装载数据库后,设置为5。
现在,这里的大问题:
如果我尝试使用我的任何存取方法程序崩溃。 例如,如果我尝试加载数据库后,使用以下命令:
aString = [[database objectAtIndex:someIndex] name];
程序崩溃并返回控制台以下错误:
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
我的解释是,该数据没有被加载,由于某种原因初始化到数据库阵列正确,但对我的生活我想不通,我已经走了错在这里。
作为一个方面说明,一切我实现了由斯蒂芬·G·库奇的书来“编程在Objective-C”
任何想法将不胜感激!