从NSMutableArray中删除对象时崩溃
在我的iPhone项目(ARC启用)我有一个nsmuatble
arrays,其中包含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];