1

前言:我的应用程序的 iPad 布局需要在 NSFetchedResultsController 提供的项目(“PostCell”)开始处的集合视图中呈现一个单元格(“PostAddCell”)。此单元格用作创建新项目的按钮。在 iPhone 上,这不是必需的,因为有用于添加新帖子的 UI 按钮。

问题: PostAddCell 仅在 NSFetchedResultsController 没有结果时出现。如果 fetch 返回 7,我看到的只是 7 个 PostCell,即使断点和日志记录表明索引路径 0:0 的数据源正在返回 PostAddCell

#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 回答