序文: 私のアプリケーションの 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;
}