在ios中删除对象

时间:2015-06-19 12:45:07

标签: ios objective-c

我的程序有一个名为“matchedCards”的NSMutable数组,我在其中添加了几个类型为Card的对象,现在我需要从数组中删除对象,并使用以下代码:

for (Card * removeCards in matchedCards)
  {
    [self.matchedCards removeObject:removeCards];
  }

第一个卡片对象被删除,之后程序崩溃,任何人都可以解释它背后的原因,如果它成功删除第一个对象,为什么它开始从第二个对象开始抛出错误

5 个答案:

答案 0 :(得分:2)

在快速枚举数组时,无法从数组中删除元素 如果您只想删除所有对象

[self.matchedCards removeAllObjects];

如果您只想删除某些元素,请记住它们在IndexSet中的索引并删除那些

NSMutableIndexSet* indexesToRemove = [NSMutableIndexSet new];
for (NSUInteger index = 0; index < [self.matchedCards count]; ++index)  {
    if (whatever) {
        [indexesToRemove addObject:index];
    }
}


[self.matchedCards removeObjectsAtIndexes:indexesToRemove];

答案 1 :(得分:1)

迭代时,无法从数组中删除对象。这样做:

for (Card * removeCards in [matchedCards copy])
{
    [self.matchedCards removeObject:removeCards];
}

答案 2 :(得分:0)

阅读崩溃日志。它会说些什么......

“收集在被列举时陈述”

或类似的东西。

使用for:in循环迭代数组时,不能改变数组。

你可以这样做......

[matchedCards enumerateObjectsUsingBlock:^(Card *removedCards, NSInteger idx, BOOL *stop) {
    [self.matchedCards removeObject:card];
}];

此外,使用当前代码,您实际上是从matchedCards数组中删除所有对象。它将导致一个空数组。你确定那是你想要的吗?

答案 3 :(得分:0)

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

答案 4 :(得分:0)

原因是你要删除当前对象并破坏for-statement

这是一个解决方案:

for (int i = 0; i < self.matchedCards.count; i++)
{
    if ([self.matchedCards[i] isKindOfClass:[YourClass class]])
    {
        [self.matchedCards removeObject:self.matchedCards[i]];

        i--; // invalidate the removed index
    }
}
NSLog(@"%@", self.matchedCards);

请注意i--很重要,否则您将无法访问数组的最后一个元素。

希望这可以帮助你..干杯......