NSMutablearray 崩溃删除对象

Posted

技术标签:

【中文标题】NSMutablearray 崩溃删除对象【英文标题】:NSMutablearray crashes deleting object 【发布时间】:2012-05-30 15:49:30 【问题描述】:

我运行一个 for 来选择要删除的对象。在我删除一个应用程序崩溃后。 我读到由于索引的原因,我无法删除 for 中的对象,所以我将它们删除到外面,但它仍然崩溃。当它在运行时崩溃时,它说它是一个 NSArray 而不是,它是一个 NSMutablearray。有谁知道为什么会这样?

代码如下:

NSMutableArray *discardedItems = [NSMutableArray array];
NSInteger catalogo = [[tmpDic objectForKey:@"catalogo"] intValue];
NSInteger documento = [[tmpDic objectForKey:@"documento"] intValue];

for (i=0; i<[self.deletedDocuments count] ; i++) 

    if ([[[self.deletedDocuments objectAtIndex:i] objectForKey:@"documento"] intValue] == documento &&
        [[[self.deletedDocuments objectAtIndex:i] objectForKey:@"catalogo"] intValue] == catalogo) 
        [discardedItems addObject:[self.deletedDocuments objectAtIndex:i]];


NSLog(@"Dictionary\n%@", self.deletedDocuments);
if (discardedItems != nil)
    [self.deletedDocuments removeObjectsInArray:discardedItems];

【问题讨论】:

【参考方案1】:

您是否将数组存储在用户默认值中?取自用户默认值的对象将是不可变的,即使存储了可变的子类

【讨论】:

是的,我是……所以这就是问题所在。那么,现在我该如何保存它们呢?并且能够删除它们? 也许可以制作 mutableCopy? ***.com/questions/2002174/copy-mutablecopy @ade 是对的,只需执行类似 [[[NSUserDefaults standardUserDefaults] objectForKey:@"SomeKey"] mutableCopy];【参考方案2】:

当它在运行时崩溃时,它说该数组是一个 NSArray,但不是,它是一个 NSMutablearray。

不,如果运行时显示它是 NSArray,那么它就是 NSArray。确保您没有将 NSArray 分配给 NSMutableArray * deletedDocuments 变量。请注意,deletedDocumentsNSArray,而不是 discardedItems

【讨论】:

【参考方案3】:

尝试:

for (int i=[self.deletedDocuments count]-1; i>=0 ; i--) 

    if ([[[self.deletedDocuments objectAtIndex:i] objectForKey:@"documento"] intValue] == documento &&
    [[[self.deletedDocuments objectAtIndex:i] objectForKey:@"catalogo"] intValue] == catalogo) 
        [self.deletedDocuments removeObjectAtIndex:i];


【讨论】:

以上是关于NSMutablearray 崩溃删除对象的主要内容,如果未能解决你的问题,请参考以下文章

在 NSMutableArray 中保留唯一对象的 id

无法将对象从块添加到 NSMutableArray

NSMutableArray removeObjectAtIndex 在第二次执行时崩溃

Objective-C NSMutableArray removeObjectAtIndex:崩溃

通过 UITableView 从 NSMutableArray 中删除项目

浅谈内存开辟问题和Block内存问题