removeAllObjects崩溃的应用程序
我想清除我的arrays,我做的是,
我有我的应用程序中的tableview视图,首先我从服务器获取数据并将其加载到tableView中。
-(void)viewDidLoad{ //fetching data from server using background thread and storing it in array called (msg_array) [table reloadData]; }
当最后一行出现在屏幕上,我想从服务器获取新的数据,我想显示它,
-(void)LoadMoreData{ //this method gets fire when last cell is on screen if ([msg_array count]>0) { [msg_array removeAllObjects]; //crashes here } }
这给出了错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeAllObjects]: unrecognized selector sent to instance
为什么会导致崩溃:
数组是这样分配的:
msg_array = [dictShow copy];
dictshow包含数据并将其复制到msg_array,而dictshow是mutabledictionary
(摘自评论 )
' – [__ NSArrayI removeAllObjects]:无法识别的select器发送到实例
这意味着数组没有你想要调用的方法。 这是因为它是一个不可变的数组( NSArray
),而不是可变的( NSMutableArray
)。
要么改变它,如果你想改变它。 或者,replace:
[msg_array removeAllObjects];
有:
msg_array = @[];
基于你的评论,数组应该是可变的。 这意味着你有一个可变的属性/实例variables,但是你正在创build一个不可变的实例来存储它。 find该位置并更新它(至less创build/返回一个mutableCopy
)。
msg_array
可能是不可改变的,这就是为什么它崩溃。 removeAllObjects
只适用于NSMutableArray
因为你试图修改一个不可变的数组,所以你有两个select:
msg_array = @[];
要么
NSMutableArray *mutableMessageArray = [msg_array mutableCopy]; [mutableMessageArray removeAllObjects]; msg_array = [mutableMessageArray copy];
我更喜欢第一个选项,但如果您需要对arrays进行任何其他修改,后面的选项对您来说可能是最好的select。
注意:
检查你如何声明msg_array
,你可以发布代码?
__NSArrayI
,仔细观察这一点,我们可以看到它的后缀为i
。 这意味着这个数组是可变的,不能改变。
你可能想要使用一个NSMutableArray
msg_array = [dictShow copy];
dictshow包含数据并将其复制到msg_array,而dictshow是mutabledictionary
这很奇怪! 我期望调用字典copy
将始终返回一个字典。 除非你在那里弄错了,否则我只能想象字典的键或其值被返回。
我想你可能意味着可变数组; 假设你做了, copy
的调用返回一个不可变的对象,试试[dictShow mutableCopy]
msg_array = [NSMutableArray arrayWithArray:_MoodsArray] .mutableCopy;