从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];
}
任何一个可以告诉我,我该如何清空该阵列,,任何建议,将不胜感激,感谢名单提前
答案很简单。
对于第一种情况。
检查你已初始化你的数组的部分,并检查是否通过你的代码的某个地方,如果你已经为你的NSMutableArray对象分配了一个NSArray。
第二种情况。
枚举时,不能从阵列中删除对象。这将导致崩溃说array has mutated while enumerating
雅在一个地方,我分配NSArray * sortDescriptors = [[NSArray分配] initWithObjects:sortDescriptor1,零]; surveys =(NSMutableArray *)[[[[NSMutableArray alloc] initWithArray:surveys] sortedArrayUsingDescriptors:sortDescriptors];我想这是造成这个问题,我该如何解决这个问题? – 2013-05-10 13:50:50
@RaviKiran如果你的调查是一个mutableArray'[survey sortUsingDescriptors:sortDescriptors];'会做得很好。 – Anupdas 2013-05-10 14:01:09
@Anupdas谢谢你,它工作得很好 – 2013-05-10 14:16:13
错误消息说,这一切,
[__NSArrayI removeObject:]: unrecognized selector
__NSArrayI是一个码字的一个不可变阵列(NSArray),这意味着您的调查对象是而不是NSMutablArray,但是NSArray。
您不能从NSArray
添加或删除对象。
检查您的代码。您已将调查的NSArray
分配给您,或者您已将其重新初始化为NSArray
。
我已经试过了,,,它通过抛出异常崩溃[__NSArrayI removeObject:]:无法识别的选择器发送到实例0xa391640 – 2013-05-10 13:25:15
如果你想添加对象在你的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];
调查宣布和初始化在哪里?从崩溃日志看来,它看起来像是NSArray而不是NSMutableArray。 – skladek 2013-05-10 13:23:32
如果你只是用一个不同的数组替换它,为什么要从数组中删除所有的对象?只需释放数组然后创建一个新数组。 – vcsjones 2013-05-10 13:23:35
@vcsjones我在ARC启用的环境中,我如何释放一个对象? – 2013-05-10 13:26:42