从NSMutableArray中删除对象时崩溃

时间:2013-05-10 13:21:02

标签: iphone ios objective-c nsmutablearray removeall

在我的iphone项目中(启用了ARC)我有一个nsmuatble数组,其中包含大约5个托管对象(从核心数据中检索),在某些情况下我需要删除{{1}中的所有对象}}

我使用了以下方法删除对象,但在崩溃日志nsmutablearray

的情况下崩溃了
-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0xa391640

我也试过

if (surveys && [surveys count]>0)
        {

            [surveys removeAllObjects];
            surveys = [[NSMutableArray alloc]init];
        }

任何人都可以告诉我如何清空该阵列,任何建议都会被赞赏,而不是提前

6 个答案:

答案 0 :(得分:19)

答案很简单。

对于第一种情况。
检查已初始化数组的部分,如果已将NSArray分配给NSMutableArray对象,请检查代码中是否有某处。

第二种情况。
通过它枚举时,无法从阵列中删除对象。这将导致array has mutated while enumerating

崩溃

答案 1 :(得分:8)

此:

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

表示您的数组“调查”是NSArray(不可变)。你确定你已经正确初始化了吗?如果你通过像这样的作业来做到这一点

NSMutableArray* surveys = [someManagedObjectContext executeFetchRequest:request]

数组“survey”将是NSArray类型,因为Core Data提取请求返回NSArrays。

答案 2 :(得分:7)

错误消息说明了一切,

[__NSArrayI removeObject:]: unrecognized selector

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

您无法在NSArray中添加或删除对象。

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

答案 3 :(得分:1)

删除你正在做的所有事情,只需按照这样做

 [surveys removeAllObjects];

从你得到的错误来看,也许这个数组不是NSmutableArray只是普通的数组,这就是为什么你不能从它中删除对象而你尝试这样做而app崩溃了

如果它是Mutable或不是

,请检查你初始化它的位置

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

答案 4 :(得分:0)

从异常中可以看出,在某种程度上,您正在为可变数组分配一个不可变实例。从评论我可以看出你正在排序surveys并且有序数组正在返回不可变数组。类型转换不适合获取不可变对象的mutableCopy。

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

而不是使用

[surveys sortUsingDescriptors: @[sortDescriptor1]];

答案 5 :(得分:0)

您可能已使用Immutable Array初始化。 使用以下代码:

NSMutableArray * newArray = [NSMutableArray arrayWithArray:oldArray];