0

我运行一个 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];
4

3 回答 3

2

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

于 2012-05-30T15:58:55.860 回答
0

当它在运行时崩溃时,它说它是一个 NSArray 而不是,它是一个 NSMutablearray。

不,如果运行时说它是一个NSArray,它是一个NSArray。确保您没有将 NSArray 分配给NSMutableArray * deletedDocuments变量。请注意,deletedDocuments那是NSArray,不是discardedItems

于 2012-05-30T15:52:01.640 回答
0

尝试:

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];
}
}
于 2012-05-30T16:21:00.650 回答