gpt4 book ai didi

iphone - 将对象插入到使用 NSUserDefaults 保存的 NSMutableArray 中

转载 作者:行者123 更新时间:2023-12-03 18:21:13 24 4
gpt4 key购买 nike

我有一个用 NSUserDefaults 保存的 NSMutableArray。这个数组是我“最喜欢”的用户可以保存的项目,因此当我想添加一个项目时,我需要读取该数组(来自 NSuserDefault)并保存在第一个空闲位置。

我正在使用此方法在 NSMutableArray 中添加值

-(IBAction)save{
NSMutableArray *abc = [[NSUserDefaults standardUserDefaults] objectForKey:@"12345"];
int n = [abc count];
[abc insertObject:@"aaa" atIndex:n];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[[NSUserDefaults standardUserDefaults] setObject:abc forKey:@"12345"];
[defaults synchronize];
[abc release];
}

这是怎么回事?如果用户调用此方法两次,应用程序第二次崩溃并显示此日志:

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

为什么?为什么只是第二次?第一次效果很好!

最佳答案

NSUserDefaults 始终返回不可变对象(immutable对象),即使原始对象是可变的。它位于 objectForKey 的文档中:

The returned object is immutable, even if the value you originally set was mutable.

在修改返回的对象之前,您需要使用[NSMutableArray arrayWithArray:]创建其副本

如果您要检索数组,可能最好使用 NSUserDefaultsarrayForKey 方法。文档在这里:https://developer.apple.com/documentation/foundation/userdefaults

关于iphone - 将对象插入到使用 NSUserDefaults 保存的 NSMutableArray 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346395/

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