从NSMutableArray中删除对象时崩溃

Rav*_*ran 16 iphone objective-c nsmutablearray removeall ios

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

我使用了以下方法来删除对象,但在崩溃日志的两种情况下它都崩溃了 -[__NSArrayI removeObject:]: unrecognized selector sent to instance 0xa391640

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

            [surveys removeAllObjects];
            surveys = [[NSMutableArray alloc]init];
        }
Run Code Online (Sandbox Code Playgroud)

我也试过

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

            surveys = [[NSMutableArray alloc]init];
        }
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何清空该阵列,任何建议都会被提前感谢

dev*_*luv 19

答案很简单.

对于第一种情况.
检查已初始化数组的部分,如果已为NSMutableArray对象分配了NSArray,请检查代码中的某处.

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

  • 答案真的很简单,谢谢!在我的例子中,我分配了 `NSArray *newArray = someArray.copy;` 而不是 `NSArray *newArray = someArray.mutableCopy;` (2认同)

Mic*_*uba 8

这个:

[__NSArrayI removeObject:] : unrecognized selector sent to instance 0xa391640
Run Code Online (Sandbox Code Playgroud)

表示您的数组"调查"是NSArray(不可变).你确定你已经正确地初始化了吗?如果你通过这样的作业来做

NSMutableArray* surveys = [someManagedObjectContext executeFetchRequest:request]
Run Code Online (Sandbox Code Playgroud)

数组"survey"将是NSArray类型,因为Core Data获取请求返回NSArrays.


Thi*_*ama 7

错误消息说明了一切,

[__NSArrayI removeObject:]: unrecognized selector
Run Code Online (Sandbox Code Playgroud)

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

您无法添加或删除对象NSArray.

检查你的代码.您已分配NSArray到调查或已将其重新初始化为 NSArray.