发送到 nsmutablearray 中的不可变对象的变异方法
mutating method sent to immutable object' in nsmutablearray
我想从 NSmutableArray 中删除对象,谁能告诉我从 NSMutableArray 中删除对象的最佳方法
.h
@property(nonatomic,retain)NSMutableArray *arr_property;
.m
_arr_property=[[NSMutableArray alloc]init];
MTPop *lplv = [[MTPop alloc] initWithTitle:SelectProperty(APP_SHARE.language)
options:[_arr_property valueForKeyPath:@"property_list.property_type_name"]
handler:^(NSInteger anIndex) {
txt_Property.text=[[_arr_property valueForKeyPath:@"property_list.property_type_name"] objectAtIndex:anIndex];
NSLog(@"index number %ld",(long)anIndex);
删除对象--->>>
NSLog(@"index number %@",[_arr_property valueForKey:@"property_list"]);
[[_arr_property valueForKeyPath:@"property_list.property_type_name"] removeObjectAtIndex:anIndex]; ////hear the app is crashing
应用程序崩溃我得到的错误是
2015-06-09 13:21:31.104 Estater[2170:62264] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object'
想想你的代码:
_arr_property=[[NSMutableArray alloc]init];
你现在有一个空 NSMutableArray。它有没有个元素。
[... removeObjectAtIndex:0];
我们刚刚说了什么?该数组有 没有 个元素。它有 no 元素 0 - 要有一个元素 0,它至少需要有 one 元素,但事实并非如此。没有什么可以删除的。
[_arr_property valueForKeyPath:@"property_list.property_type_name"]
那部分是最奇怪的,但让我们继续。当在数组上调用时,valueForKeyPath:
会产生一个 NSArray,而不是 NSMutableArray。所以这会给你一个 空的 NSArray。但是你不能对 NSArray 说 removeObjectAtIndex:
,即使它是空的——它是不可变的。这就是您遇到的崩溃。
真正的错误是您在 NSMutableArray 的 元素 上调用 removeObject:
[-->[_arr_property valueForKeyPath:@"property_list.property_type_name"]<-- removeObjectAtIndex:0];
数组看起来是空的,但如果有东西填充,要删除第一个元素,您应该改为:
[_arr_property removeObjectAtIndex:0];
首先,您不能使用 NSMutableArray
不支持的键值编码。您必须更好地使用 NSMutableDictionary
。
字典根据键存储对象,而数组根据索引存储对象。
您可以像这样使用 NSMutableDictionary:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:something forKey:@"Some Key"];
// ... and later ...
id something = [dict objectForKey:@"Some Key"];
其次,valueForKeyPath:
returns 不是数组的值和 valueForKey:
returns 键的值数组,而且该数组不是可变的。
编辑:
第三,在对 valueForKeyPath:
、found its use in collection operation and syntax for using is 进行更多研究之后。所以,通过改变
[_arr_property valueForKeyPath:@"property_list.property_type_name"]
到
[_arr_property valueForKeyPath:@"@property_list.property_type_name"]
我想从 NSmutableArray 中删除对象,谁能告诉我从 NSMutableArray 中删除对象的最佳方法
.h
@property(nonatomic,retain)NSMutableArray *arr_property;
.m
_arr_property=[[NSMutableArray alloc]init];
MTPop *lplv = [[MTPop alloc] initWithTitle:SelectProperty(APP_SHARE.language)
options:[_arr_property valueForKeyPath:@"property_list.property_type_name"]
handler:^(NSInteger anIndex) {
txt_Property.text=[[_arr_property valueForKeyPath:@"property_list.property_type_name"] objectAtIndex:anIndex];
NSLog(@"index number %ld",(long)anIndex);
删除对象--->>>
NSLog(@"index number %@",[_arr_property valueForKey:@"property_list"]);
[[_arr_property valueForKeyPath:@"property_list.property_type_name"] removeObjectAtIndex:anIndex]; ////hear the app is crashing
应用程序崩溃我得到的错误是
2015-06-09 13:21:31.104 Estater[2170:62264] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object'
想想你的代码:
_arr_property=[[NSMutableArray alloc]init];
你现在有一个空 NSMutableArray。它有没有个元素。
[... removeObjectAtIndex:0];
我们刚刚说了什么?该数组有 没有 个元素。它有 no 元素 0 - 要有一个元素 0,它至少需要有 one 元素,但事实并非如此。没有什么可以删除的。
[_arr_property valueForKeyPath:@"property_list.property_type_name"]
那部分是最奇怪的,但让我们继续。当在数组上调用时,valueForKeyPath:
会产生一个 NSArray,而不是 NSMutableArray。所以这会给你一个 空的 NSArray。但是你不能对 NSArray 说 removeObjectAtIndex:
,即使它是空的——它是不可变的。这就是您遇到的崩溃。
真正的错误是您在 NSMutableArray 的 元素 上调用 removeObject:
[-->[_arr_property valueForKeyPath:@"property_list.property_type_name"]<-- removeObjectAtIndex:0];
数组看起来是空的,但如果有东西填充,要删除第一个元素,您应该改为:
[_arr_property removeObjectAtIndex:0];
首先,您不能使用 NSMutableArray
不支持的键值编码。您必须更好地使用 NSMutableDictionary
。
字典根据键存储对象,而数组根据索引存储对象。
您可以像这样使用 NSMutableDictionary:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:something forKey:@"Some Key"];
// ... and later ...
id something = [dict objectForKey:@"Some Key"];
其次,valueForKeyPath:
returns 不是数组的值和 valueForKey:
returns 键的值数组,而且该数组不是可变的。
编辑:
第三,在对 valueForKeyPath:
、found its use in collection operation and syntax for using is 进行更多研究之后。所以,通过改变
[_arr_property valueForKeyPath:@"property_list.property_type_name"]
到
[_arr_property valueForKeyPath:@"@property_list.property_type_name"]