使用可变数组函数时,将变异方法发送到不可变对象错误
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 将变异方法发送到不可变对象