1

序文: 私のアプリケーションの iPad レイアウトでは、NSFetchedResultsController によって提供される項目 (「PostCell」) の開始時に、コレクション ビュー内でセル (「PostAddCell」) をレンダリングする必要があります。このセルは、新しいアイテムを作成するためのボタンとして機能します。iPhone では、新しい投稿を追加するための UI ボタン​​があるため、これは必要ありません。

問題: PostAddCell は、NSFetchedResultsController に結果がない場合にのみ表示されます。フェッチが 7 を返した場合、ブレークポイントとログが PostAddCell がインデックス パス 0:0 のデータソースによって返されていることを示唆しているにもかかわらず、7 つの PostCells しか表示されません。

#pragma mark - UICollectionView Datasource

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [_fetch sections][section];
    if(isPad()){
        return [sectionInfo numberOfObjects]+1;
    }else{
        return [sectionInfo numberOfObjects];
    }
}

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView
{
    return [[_fetch sections] count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

    UICollectionViewCell *cell;

    if(isPad()){
        if(indexPath.row == 0){
            cell = [cv dequeueReusableCellWithReuseIdentifier:@"PostAddCell" forIndexPath:indexPath];
            [(MNPAddPostCell*)cell configure];
        }else{
            NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:indexPath.section];
            cell = [cv dequeueReusableCellWithReuseIdentifier:@"PostCell" forIndexPath:newIndexPath];
            [(MNPPostCell*)cell configureForPost:[_fetch objectAtIndexPath:newIndexPath]];
        }
    }else{
        cell = [cv dequeueReusableCellWithReuseIdentifier:@"PostCell" forIndexPath:indexPath];
        [(MNPPostCell*)cell configureForPost:[_fetch objectAtIndexPath:indexPath]];
    }

    return cell;

}
4

1 に答える 1

0

ここにはいくつかの問題があると思います。まず、複数のセクションがあると仮定して、すべてのセクションの行 0 に MNPAddPostCell が必要でない限り、インデックス パス セクションとインデックス パス行をチェックする必要がありますか? 第二に私は思う

cell = [cv dequeueReusableCellWithReuseIdentifier:@"PostCell" forIndexPath:newIndexPath];

MNPAddPostCell を踏みつけている可能性があります。そうじゃないかな

cell = [cv dequeueReusableCellWithReuseIdentifier:@"PostCell" forIndexPath:indexPath];

新しいインデックスパスを使用して、コントローラーから適切なオブジェクトを取得するだけですか?

于 2013-11-10T04:43:04.390 に答える