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;