从NSMutableArray中删除对象时崩溃

问题描述:

在我的iphone项目(启用ARC)中,我有一个nsmuatble数组,其中包含一些5个管理对象(从核心数据中检索),在某些情况下,我需要从该nsmutablearray中删除所有对象从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]; 
     } 

任何一个可以告诉我,我该如何清空该阵列,,任何建议,将不胜感激,感谢名单提前

+1

调查宣布和初始化在哪里?从崩溃日志看来,它看起来像是NSArray而不是NSMutableArray。 – skladek 2013-05-10 13:23:32

+2

如果你只是用一个不同的数组替换它,为什么要从数组中删除所有的对象?只需释放数组然后创建一个新数组。 – vcsjones 2013-05-10 13:23:35

+0

@vcsjones我在ARC启用的环境中,我如何释放一个对象? – 2013-05-10 13:26:42

答案很简单。

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

第二种情况。
枚举时,不能从阵列中删除对象。这将导致崩溃说array has mutated while enumerating

+0

雅在一个地方,我分配NSArray * sortDescriptors = [[NSArray分配] initWithObjects:sortDescriptor1,零]; surveys =(NSMutableArray *)[[[[NSMutableArray alloc] initWithArray:surveys] sortedArrayUsingDescriptors:sortDescriptors];我想这是造成这个问题,我该如何解决这个问题? – 2013-05-10 13:50:50

+0

@RaviKiran如果你的调查是一个mutableArray'[survey sortUsingDescriptors:sortDescriptors];'会做得很好。 – Anupdas 2013-05-10 14:01:09

+0

@Anupdas谢谢你,它工作得很好 – 2013-05-10 14:16:13

错误消息说,这一切,

[__NSArrayI removeObject:]: unrecognized selector 

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

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

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

+0

我已经试过了,,,它通过抛出异常崩溃[__NSArrayI removeObject:]:无法识别的选择器发送到实例0xa391640 – 2013-05-10 13:25:15

+0

如果你想添加对象在你的NSMutableArray中找到在NSArray中,只需在该NSArray内部执行一个for循环并将其逐个添加到您的NSMutableArray中。这样,你可以删除你的NSMutableArray中的所有对象。不要直接将NSArray分配给该NSMutableArray,因为这会使其成为不再可变的数组。 – jaytrixz 2013-10-10 14:02:06

删除所有你正在做的事情,只是不喜欢这个

[surveys removeAllObjects]; 

正如从你得到这样的错误也许这阵不NSMutableArray的只是正常的阵列所以这就是为什么你不能删除对象从它,你尝试这样做,并应用了崩溃

检查正如我说删除所有的东西,使用简单的removeAllObject,你必须初始化它,如果它是可变的或不

所以

此:

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

表明您阵 “调查” 是的NSArray(非可变)。你确定你已经正确地初始化了吗?如果你做到这一点通过分配这样

NSMutableArray* surveys = [someManagedObjectContext executeFetchRequest:request] 

数组“调查”将是类型NSArray的,因为核心数据提取请求返回NSArrays。

从例外非常明显,在某些时候,你正在分配一个不可变实例到你的可变数组。从评论我可以看出,你排序surveys和排序数组返回immutable数组。类型转换不会对获取不可变对象的mutableCopy有用。

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

而不是用它

[surveys sortUsingDescriptors: @[sortDescriptor1]]; 

你可能有不可改变的阵列初始化。 使用下面的代码:

NSMutableArray * newArray = [NSMutableArray arrayWithArray:oldArray];