我正在尝试在.h文件中声明并在.m文件中合成的NSMutable数组中编辑对象,但是该应用程序因调试错误而崩溃:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'
使应用程序崩溃的行是:
[noteContent replaceObjectAtIndex:currentNote withObject:noteText.text];
noteContent
在.h @property (nonatomic, strong) NSMutableArray* noteContent;
中声明,在.m @synthesize noteContent
中合成并在viewDidLoad中初始化noteContent = [[NSMutableArray alloc] init];
noteContent = [standardUserDefaults objectForKey:@"noteContent"];
问题不在于替换nil对象,因为我检查了在该位置是否存储了实际的字符串。
感谢你的付出。
最佳答案
您已将NSArray
分配给noteContent
:
noteContent = [standardUserDefaults objectForKey:@"noteContent"];
因此,尽管您已将变量声明为可变数组,但所引用的实际对象是不可变的。试试这个:
noteContent = [[NSMutableArray alloc] initWithArray:[standardUserDefaults objectForKey:@"noteContent"]];
正如@Abizern在评论中所解释的那样,有一个要做的论点:
noteContent = [[standardUserDefaults objectForKey:@"noteContent"] mutableCopy];
但是,应该注意的是,采用这种方法,如果
noteContent
返回nil
,[standardUserDefaults objectForKey:@"noteContent"]
将为nil
。因此,如果大概要向可变数组添加项目,则需要添加更多代码来处理nil
情况。