【问题标题】:Remove object from NSMutableArray after parsing JSON解析 JSON 后从 NSMutableArray 中删除对象
【发布时间】:2013-01-31 17:29:29
【问题描述】:

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

[arrayList removeObjectAtIndex:0];

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

【问题讨论】:

    标签: objective-c arrays json parsing nsmutablearray


    【解决方案1】:

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

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

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

    您可以这样做:

    arrayList = [[JSON objectForKey:@"list"] mutableCopy];
    [arrayList removeObjectAtIndex:0];
    

    【讨论】:

    • 谢谢你,米哈伊尔,最简单的解决方案!使用“mutableCopy”有一些问题,还是在这里它是自动发布的?我正在使用 ARC...
    • 没有问题 - 当你使用 arc 时,你通常不会在这种情况下考虑保留和释放
    • 非常感谢,我解决了我的问题..太棒了
    【解决方案2】:

    问题是您使用的是NSArray 而不是NSMutableArray。这可能是因为您的解析器返回不可变对象。你需要做的是获取NSArray,用它创建一个NSMutableArray,然后删除第一个对象

    NSMutableArray *_arrayList = [NSMutableArray arrayWithArray:arrayList];
    [_arrayList removeObjectAtIndex:0];
    // dont forget to store your array wherever you need it
    

    【讨论】:

    • 谢谢,伊斯梅尔!但抱歉,如果我在 arrayList = [[NSMutableArray alloc] init]; 之前声明了它还不是 NSMutableArray ?!
    • 但在那之后你正在做arrayList = [JSON objectForKey:@"list"];。无论如何,您接受的答案是最好的方法:) 干杯
    【解决方案3】:

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

    注意:分配NSMutableArrayinitWithCapacity方法初始化

    【讨论】:

      【解决方案4】:

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

      NSMutableArray *mutableArrayList = [arrayList mutableCopy];
      

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

      【讨论】:

        猜你喜欢
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多