【问题标题】:Insert new array to NSMutabbleArray将新数组插入 NSMutableArray
【发布时间】:2014-04-20 08:47:48
【问题描述】:

我有一个带有 AFHTTPRequestOperation 的 json 解析器。

我的解析代码:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

operation.responseSerializer = [AFJSONResponseSerializer serializer];

我有一个NSMutableArray

@property (strong, nonatomic) NSMutableArray * myDirectory;

首先,我加载主要的 10 个项目并添加以下内容:

self.myDirectory = responseObject;

之后,当我想加载更多 10 个项目时,我尝试了很多东西,但错误是:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '-[__NSCFArray insertObject:atIndex:]:
mutating method sent to immutable object'

我试过了:

[self.myDirectory insertObject:[responseObject mutableCopy] atIndex:[self.myDirectory count]];
[self.myDirectory addObjects:responseObject];
etc...

我必须使用什么?

【问题讨论】:

  • 错误告诉你insertObject:atIndex的接收者是不可变的。很可能,您应该以不同的方式分配 myDirectory 属性,例如self.myDirectory = [responseObject mutableCopy] 确保它是可变的
  • 你没有 NSMutableArray。

标签: ios objective-c nsmutablearray


【解决方案1】:

AFNetworking 返回不可变数组 (NSArray),因此您必须像这样分配它:

self.myDirectory = [responseObject mutableCopy]

【讨论】:

  • 尝试将我作为答案的行替换为: self.myDirectory ? [self.myDirectory addObjectsFromArray:responseObject] : self.myDirectory = responseObject;
  • 同样的错误:[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
【解决方案2】:

你试过[myArray addObjectsFromArray:otherArray];

【讨论】:

    【解决方案3】:

    AFNetworking 返回不可变数组。所以试试这个:

    self.myDirectory = [responseObject mutableCopy];
    

    当您想将第二个 responseObject 添加到前一个 self.myDirectory 时,请尝试以下操作:

    [self.myDirectory addObjectsFromArray: responseObject];
    

    查看this answer 以获得关于copymutableCopy 的清晰概念。

    希望这会有所帮助.. :)

    编辑:

    NSArray *arr = [[NSArray alloc] initWithObjects:@"A",@"B", nil];
    NSArray *arr1 = [[NSArray alloc] initWithObjects:@"C",@"D", nil];
    NSArray *arr2 = [[NSArray alloc] initWithObjects:@"E",@"F", nil];
    NSMutableArray *mutableArray= [[NSMutableArray alloc] init];
    mutableArray = [arr mutableCopy];
    [mutableArray addObjectsFromArray:arr1];
    [mutableArray addObjectsFromArray:arr2];
    NSLog(@"%@",mutableArray);
    

    【讨论】:

    • 我试过了,首先是删除第一个项目,你的第二个代码不起作用,再次出现同样的错误。
    • 试试这个:[self.myDirectory addObjectsFromArray: [responseObject mutableCopy]];告诉我。
    • 再次报错:[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
    • 我的应用程序中有许多数据对象类型。例如; id、title、author、date、hits、photo、updated_date 等...我应该为所有人创建 initwithObjects 吗?
    • 它们是数组还是字典?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多