我的程序有一个名为“matchedCards”的NSMutable数组,我在其中添加了几个类型为Card的对象,现在我需要从数组中删除对象,并使用以下代码:
for (Card * removeCards in matchedCards)
{
[self.matchedCards removeObject:removeCards];
}
第一个卡片对象被删除,之后程序崩溃,任何人都可以解释它背后的原因,如果它成功删除第一个对象,为什么它开始从第二个对象开始抛出错误
答案 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--
很重要,否则您将无法访问数组的最后一个元素。
希望这可以帮助你..干杯......