使用jsonviewer.stack.hu格式化的JSON源:
我的解析方法(简化):
- (void)parseMethod {
// OTHER STUFF
arrayList = [[NSMutableArray alloc] init];
NSURL *url2 = // THE URL SOURCE OF JSON OBJECT, ON A REMOTE SERVER
NSURLRequest *request2 = [NSURLRequest requestWithURL:url2 cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0];
AFJSONRequestOperation *operation2 = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request2
success:^(NSURLRequest *request2, NSHTTPURLResponse *response2, id JSON)
{
arrayList = [JSON objectForKey:@"list"];
// HERE I TRIED TO WRITE [arrayListPrev removeObjectAtIndex:0];
NSMutableArray *arrayList1 = [arrayList valueForKey:@"list1"];
}
failure:^(NSURLRequest *request2, NSHTTPURLResponse *response2, NSError *error2, id JSON2) {
}];
[operation2 start];
}
问题: 在解析之后我想删除名为“list”的数组的FIRST OBJECT,因为我必须用数组中的list1的所有值填充UITableView的行,除了第一个(list array->数组0-> list1的值为0)。我试过了代码:
[arrayList removeObjectAtIndex:0];
在几个位置但应用程序崩溃并出现错误:' - [__ NSCFArray removeObjectAtIndex:]:发送到不可变对象的变异方法' ...所以什么是删除FIRST对象的最佳方法(数组编号) 0)从解析后的那个NSMutableArray *列表,到ELIMINATE 0对象的list1值?谢谢!
答案 0 :(得分:3)
尽管你写了arrayList = [[NSMutableArray alloc] init];
在这里,正如我猜的那样,你分配了简单的不可变数组实例
arrayList = [JSON objectForKey:@"list"];
您可以这样做:
arrayList = [[JSON objectForKey:@"list"] mutableCopy];
[arrayList removeObjectAtIndex:0];
答案 1 :(得分:2)
问题是您使用的是NSArray
而不是NSMutableArray
。这可能是因为您的解析器返回不可变对象。您需要做的是取NSArray
,用它创建NSMutableArray
,然后删除第一个对象
NSMutableArray *_arrayList = [NSMutableArray arrayWithArray:arrayList];
[_arrayList removeObjectAtIndex:0];
// dont forget to store your array wherever you need it
答案 2 :(得分:2)
错误显示您的数组具有不可变类型的值。使用可变副本或使用-arrayWithArray:
方法初始化您的arrayList。希望它能解决问题。
注意:使用NSMutableArray
方法
initWithCapacity
进行初始化
快乐编码
答案 3 :(得分:0)
正如其他人所建议的那样,你正在使用一种非可变的NSArray(可编辑)。我将使用新功能添加我的输入:
NSMutableArray *mutableArrayList = [arrayList mutableCopy];
这会创建一个可变的数组副本。