从NSMutableArray中删除对象时崩溃

在我的iPhone项目(ARC启用)我有一个nsmuatblearrays,其中包含5个pipe理对象(这是从核心数据检索),在某些情况下,我需要从该nsmutablearray删除所有的对象

我已经使用下面的方法来删除对象,但它崩溃的情况下与崩溃日志-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0xa391640

 if (surveys && [surveys count]>0) { [surveys removeAllObjects]; surveys = [[NSMutableArray alloc]init]; } 

我也试过

 if (surveys && [surveys count]>0) { for(Survey *obj_Survey in surveys) { [surveys removeObject:obj_Survey]; } surveys = [[NSMutableArray alloc]init]; } 

任何一个可以告诉我如何空arrays,任何build议,将不胜感激,thanx提前

答案很简单。

对于第一种情况。
检查你已经初始化你的数组的部分,并检查是否通过你的代码的某个地方,如果你已经为你的NSMutableArray对象分配了一个NSArray。

对于第二种情况。
在枚举数组时,您不能从数组中移除对象。 这将导致崩溃,说array has mutated while enumerating

这个:

 [__NSArrayI removeObject:] : unrecognized selector sent to instance 0xa391640 

表明你的数组“调查”是NSArray(不可改变)。 你确定你已经正确地初始化了吗? 如果你这样做的任务

 NSMutableArray* surveys = [someManagedObjectContext executeFetchRequest:request] 

数组“调查”将是NSArraytypes,因为核心数据获取请求返回NSArrays。

错误信息说明了这一切,

 [__NSArrayI removeObject:]: unrecognized selector 

__NSArrayI是一个不可变数 (NSArray)的代码字,这意味着您的调查对象不是NSMutablArray ,而是NSArray

您不能添加或从NSArray删除对象。

检查你的代码。 您已经将NSArray分配给调查,或者您已将其重新初始化为NSArray

删除所有你正在做的事情,只是这样做

  [surveys removeAllObjects]; 

由于你得到的错误,所以也许该数组不是NSmutableArray只是正常的数组,所以这就是为什么你不能从它删除对象,你试图这样做,应用程序崩溃

如果它是可变的,请检查您已经初始化的位置

所以我说删除所有的东西,并使用简单的removeAllObject

从例外情况来看,非常明显的是,在某些时候,您正在将不可变实例分配给可变数组。 从评论我可以看出,你正在sortingsurveys和sorting数组返回immutable数组。 types转换不会对获取不可变对象的mutableCopy有用。

 NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,nil]; surveys = (NSMutableArray *) [[[NSMutableArray alloc]initWithArray:surveys ] sortedArrayUsingDescriptors:sortDescriptors]; 

而不是使用它

 [surveys sortUsingDescriptors: @[sortDescriptor1]]; 

你可能已经用Immutable Array初始化了。 使用下面的代码:

NSMutableArray * newArray = [NSMutableArray arrayWithArray:oldArray];