Ошибка утверждения в UICollectionView при удалении

Я продолжаю получать ошибку утверждения, когда пытаюсь удалить ячейки из моего UICollectionView. Что я делаю карточную игру и когда карты совпадают они должны быть удалены. Я сделал так, что когда они совпадают, я удаляю все совпадающие карты в модели, а затем удаляю их из CollectionView. Это часть Задания №3 из Стэнфордского курса cs193p. Вот мой код.

Код контроллера

-(void) updateUI{

NSMutableArray* tempCardToDelete = [[NSMutableArray alloc] init];

for(UICollectionViewCell *cell in [self.cardCollectionView visibleCells]){
    NSIndexPath *indexPath = [self.cardCollectionView indexPathForCell:cell];
    NSLog(@"%d", indexPath.item);
    Card* card = [self.game cardAtIndex:indexPath.item];
    NSLog(@"Face up is %d", card.faceUp);
    NSLog(@"%@", card.contents);

// This will update the individual cell with a card value
    [self updateCell:cell usingCard:card];

//cards that are not playable and faceup have been matched so we store them    
if(card.isFaceUp && card.isUnplayable){
        [tempCardToDelete addObject:indexPath];
        self.cardsToDelete = [tempCardToDelete copy];
    }
}
//delete the cards from the model
[self.game deleteMatchedCards];
//delete the cards from the collectionView
if(self.cardsToDelete.count != 0){
     [self.cardCollectionView deleteItemsAtIndexPaths:self.cardsToDelete];
}

}

Код модели

-(void) deleteMatchedCards{

//the property stores the cards that should be deleted
for(Card *cards in self.modelCardsToDelete){
    NSUInteger deleteIndex = [self.modelCardsToDelete indexOfObject:cards];
    [self.cards removeObjectAtIndex:deleteIndex];
}
}

person user2076774    schedule 24.06.2013    source источник
comment
Как определяется modelCardsToDelete? Это должно быть то же самое, что и карты для удаления?   -  person davis    schedule 25.06.2013
comment
Какую полную ошибку вы получаете?   -  person rmaddy    schedule 25.06.2013
comment
Ошибка утверждения из-за «утверждения» в вашем коде? (И если да, то где он появляется)   -  person Melvin Sovereign    schedule 25.06.2013
comment
modelCardsToDelete — это массив карт класса, хранящийся в модели, из которой состоит полная колода карт. Я храню карты, которые были подобраны там. CardsToDelete также является массивом, но хранит IndexPaths этих карт. Он получает индексные пути от контроллера и проверяет свойство unplayable и faceup.   -  person user2076774    schedule 25.06.2013
comment
Полная ошибка - Ошибка утверждения в -[UICollectionView _endItemAnimations], /SourceCache/UIKit_Sim/UIKit-2380.17/UICollectionView.m:2801   -  person user2076774    schedule 25.06.2013
comment
может быть это завершающее приложение из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (20), должно быть равно количеству элементов содержащихся в этом разделе до обновления (20), плюс или минус количество элементов, вставленных или удаленных из этого раздела (0 вставленных, 2 удаленных) и плюс или минус количество элементов, перемещенных в этот раздел или из него (0 перемещенных в , 0 съехал)'.   -  person user2076774    schedule 25.06.2013


Ответы (1)


Сначала удалите массив форм объектов, затем удалите элемент из кода CollectionView:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return _totalImagesData.count;   //array from which you are displaying data in collection view
} 


//delete
 [_totalImagesData removeObjectAtIndex:indexPath.item];
 [self.collectionViewPack deleteItemsAtIndexPaths:[NSArray arrayWithObject:indPath]];
person Surender Rathore    schedule 04.09.2013