0

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

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”的数组的第一个对象,因为我必须用数组中 list1 的所有值填充 UITableView 的行,除了第一个(列表数组->数组编号 0- >list1 值为 0 )。我已经尝试过代码:

[arrayList removeObjectAtIndex:0];

在几个位置,但应用程序因错误而崩溃:'-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' ... 那么在解析后从 NSMutableArray *list 中删除第一个对象(数组编号 0)的最佳方法是什么,要 ELIMINATE 0 对象的 list1 值吗?谢谢!

4

4 回答 4

3

尽管你写arrayList = [[NSMutableArray alloc] init];

在这里,我猜,您分配简单的不可变数组实例

arrayList = [JSON objectForKey:@"list"];

你可以这样做:

arrayList = [[JSON objectForKey:@"list"] mutableCopy];
[arrayList removeObjectAtIndex:0];
于 2013-01-31T17:40:06.800 回答
2

问题是您使用的是 anNSArray而不是NSMutableArray. 这可能是由于您的解析器返回不可变对象的事实。你需要做的是拿那个NSArray,用它创建一个NSMutableArray,然后删除第一个对象

NSMutableArray *_arrayList = [NSMutableArray arrayWithArray:arrayList];
[_arrayList removeObjectAtIndex:0];
// dont forget to store your array wherever you need it
于 2013-01-31T17:35:45.057 回答
2

错误表明您的数组具有不可变类型的值。使用可变副本或使用方法初始化您的 arrayList -arrayWithArray:。希望它能解决问题。

注意:分配NSMutableArrayinitWithCapacity方法初始化

于 2013-01-31T17:35:52.477 回答
0

正如其他人所建议的那样,您正在使用一个 NSArray,它不是可变的(可编辑的)。我将使用新功能添加我的输入:

NSMutableArray *mutableArrayList = [arrayList mutableCopy];

这将创建数组的可变副本。

于 2013-01-31T17:42:43.083 回答