在我的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];
}
任何人都可以告诉我如何清空该阵列,任何建议都会被赞赏,而不是提前
答案 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];