gpt4 book ai didi

ios - 在访问我的 NSDictionary 时需要帮助理解条件崩溃

转载 作者:行者123 更新时间:2023-11-28 19:05:10 27 4
gpt4 key购买 nike

我将我的数据保存在一个名为 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:]: unrecognized selector sent to instance

我退出应用程序,检查文档文件夹,看到写出的数据文件没有问题。
我重新运行应用程序,然后没有崩溃,数据文件看起来仍然不错。
这是可重复的。

  • 如果数据文件存在,则不会崩溃。
  • 如果首先需要创建数据,则崩溃。

(在所有情况下,我手动查看生成的数据文件并准确查看我期望看到的内容 - 没有问题)

我什至不知道从哪里开始解决这个错误,并且真的很想了解为什么会发生这种情况的细节。

非常感谢您的帮助!

最佳答案

只是回顾一下上面的正确评论:

-[__NSDictionaryI setObject:forKeyedSubscript:]: unrecognized selector sent to instance

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" }];

关于ios - 在访问我的 NSDictionary 时需要帮助理解条件崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com