0

次のコードを使用して、アイテムをコレクション ビューに挿入しようとしていました。

- (IBAction)addCards:(UIButton *)sender {
    int numberOfCardsToAdd = EXTRA_CARDS_NUMBER;
    if ([[self.collectionView visibleCells] count] == 0) {
        numberOfCardsToAdd = self.startingCardCount;}

    // loop through the game model, draw random cards from the deck and assign it to the array
    // take into account the "no cards left in deck" case

    for (int i = 0; i < numberOfCardsToAdd; i++) {
        if (![self.game.deck isEmpty]) {
            SetsCard *cardToAdd = (SetsCard *) [self.game.deck drawRandomCard];
            if (cardToAdd) [self.game.cards addObject:cardToAdd];

            NSIndexPath *newObject = [[NSIndexPath alloc] initWithIndex:[self.game.cards indexOfObject:cardToAdd]];

            [self.collectionView insertItemsAtIndexPaths:@[newObject]]; // adding card to view
        }
    }
    [self.collectionView reloadData];
}

そして、私はこのエラーを受け取りました:

Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-2380.17/UITableViewSupport.m:2680
2013-06-13 09:09:12.443 Improved Matchismo[1206:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid index path for use with UITableView.  Index paths passed to table view must contain exactly two indices specifying the section and row.  Please use the category on NSIndexPath in UITableView.h if possible.'

*** First throw call stack:
(0x1cb1012 0x10eee7e 0x1cb0e78 0xb84665 0x29eb6c 0x54b14d 0x53fd69 0x53e60e 0x53e646 0x926e 0x1102705 0x362c0 0x36258 0xf7021 0xf757f 0xf66e8 0x65cef 0x65f02 0x43d4a 0x35698 0x1c0cdf9 0x1c0cad0 0x1c26bf5 0x1c26962 0x1c57bb6 0x1c56f44 0x1c56e1b 0x1c0b7e3 0x1c0b668 0x32ffc 0x269d 0x25c5)
libc++abi.dylib: terminate called throwing an exception

UICollectionViewアイテムをではなくに追加していたので、これは本当に混乱します。UITableViewアプリは のインスタンスをまったく使用しませんUITableView。なぜこのエラーが発生したのか、どうすれば修正できるのか誰か知っていますか?

よろしくお願いします!

4

1 に答える 1

2

コレクション ビューは、テーブル ビューと同じように 2 レベルのインデックス パス (セクション/行) で動作するため、インデックス パスを作成する必要があります。

NSIndexPath *newObject = [NSIndexPath indexPathForRow:... inSection:0];

セクションが 1 つしかない場合 (セクション 0)。

-[NSIndexPath row]カテゴリで宣言されて@interface NSIndexPath (UITableView)おり、エラー メッセージはおそらく iOS 6 でコレクション ビューが導入されたときに変更されていないため、「UITableView で使用するインデックス パスが無効です」というメッセージは誤解を招きます。

于 2013-06-13T13:40:36.350 に答える