使用可变数组函数时,将变异方法发送到不可变对象错误

Posted

技术标签:

【中文标题】使用可变数组函数时,将变异方法发送到不可变对象错误【英文标题】:mutating method sent to immutable object error when using mutable array functions 【发布时间】:2012-02-29 15:49:41 【问题描述】:

我的应用程序总是弹出“发送到不可变对象的变异方法” 我的字典和数组已经声明为可变的,但似乎没有帮助 我试过replaceObjectAtIndex函数也没有用。

NSString* plistpath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
NSMutableDictionary* dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:plistpath];
NSMutableArray* Array1 = [dictionary objectForKey:@"Array1"];
[Array1 removeObjectAtIndex:num];
[Array1 insertObject:@"1" atIndex:num];
return Array1;

谢谢

【问题讨论】:

您是如何将Array1 添加到dictionary 以及在添加之前如何创建的? 【参考方案1】:

试试:

NSArray *array = [dictionary objectForKey:@"Array1"]; // Immutable
NSMutableArray * Array1 = [NSMutableArray arrayWithArray:array]; // Mutable
// ...

或者如 Julien 所说:

NSArray *array = [dictionary objectForKey:@"Array1"]; // Immutable
NSMutableArray * Array1 = [array mutableCopy]; // Mutable

【讨论】:

你也可以使用 mutableCopy 方法(例如:[[dictionary objectForKey:@"Array1"] mutableCopy];)【参考方案2】:

如果右侧没有返回 NSMutableArray(而是使用 NSArray),则您尝试改变 in 可变对象。

NSMutableArray* Array1 = [字典 objectForKey:@"Array1"]; // NSArray

【讨论】:

以上是关于使用可变数组函数时,将变异方法发送到不可变对象错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSMutableArray 将变异方法发送到不可变对象

发送到不可变对象的变异方法 - iOS [重复]

尽管对象是 NSMutableDictionary,但“发送到不可变对象的变异方法”

崩溃:发送到不可变对象的变异方法

发送到不可变对象的变异方法

发送到不可变对象的变异方法