iOS创建可变数组,却报错它是不可变数组的bug

2016-07-19  本文已影响535人  plantseeds

给返回的网络数据赋值时发现一个bug,
创建对象

_imgUrls = [NSMutableArray new];

rsp[@"imgurl"] 是网络返回数据,为数组格式,于是我在返回数据后这样赋值

self.imgUrls = rsp[@"imgurl"];  

再调用

[self.imgUrls removeObjectAtIndex:] ,

结果报错:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object'

说这是一个不可变的self.imgUrls数组, 然而 我创建self.imgUrls的时候,的确是用 [NSMutableArray new]创建的

真正的原因是:

在赋值 self.imgUrls = rsp[@"imgurl"] 的时候, 是把一个不可变数组赋值给一个可变数组,所以即使声明了NSMutableArray可变,也没用!

我这样解决:

先声明另外一个数组 arr = rsp[@"imgurl"],然后遍历它,给self.imgUrls赋值

NSMutableArray *arr = rsp[@"imgurl"];
for (int i = 0; i < arr.count; i++) {
      [self.imgUrls addObject:arr[i]];
}
上一篇下一篇

猜你喜欢

热点阅读