我将数据保存在名为practiceRecords
(字典NSArray
的属性中。
我检查文档文件夹中是否已存在数据。
self.practiceRecords
。 self.practiceRecords
属性中,然后将数据写入文档文件夹。据我所知,在此过程中没有问题。
然后我按照以下步骤修改数据......
-(void)incNumberOfTriesFor:(NSString *)stringOfIndex {
if (self.practiceRecords)
{
int index = [stringOfIndex intValue];
int numberOfTries = [(NSNumber *)(self.practiceRecords[index][@"tries"]) intValue] + 1;
//CRASHING on this next line.
self.practiceRecords[index][@"tries"] = @(numberOfTries);
//message to helper method
[self writePracticeRecords];
}
}
所以第一次通过(当数组被构建和写出时)我在指示的行发生了崩溃 错误是:
- [__ NSDictionaryI setObject:forKeyedSubscript:]:无法识别的选择器发送到实例
我退出应用程序,检查文档文件夹,看到写出的数据文件没有问题 我重新运行应用程序,然后没有崩溃,数据文件仍然看起来很棒 这是可重复的。
(在所有情况下,我手动查看生成的数据文件并查看我期望看到的内容 - 没有问题)
我不确定在哪里开始压扁这个bug,并且真的想了解为什么会发生这种情况的详细信息。
非常感谢您的帮助!
答案 0 :(得分:4)
回顾上面的正确评论:
- [__ NSDictionaryI setObject:forKeyedSubscript:]:无法识别的选择器发送到实例
NSDictionary没有实现任何set ...方法,因为它是不可变的。您声明在磁盘上找不到数据时使用文字语法创建。文字语法创建不可变容器
相反,试试......
// try to initialize from disk, but if not
// we can still use literal (immutable) syntax, but in a mutable container
self.practiceRecords = [NSMutableDictionary
dictionaryWithDictionary:@{ @"key" : @"value" }];