解析JSON后从NSMutableArray中删除对象

时间:2013-01-31 17:29:30

标签: objective-c arrays json parsing nsmutablearray

使用jsonviewer.stack.hu格式化的JSON源:

Json formatter

我的解析方法(简化):

- (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值?谢谢!

4 个答案:

答案 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];

这会创建一个可变的数组副本。