使用NSFetchedResultsController时,向UITableView添加自定义部分

时间:2012-09-21 14:48:10

标签: nsfetchedresultscontroller uitableview

我正在与NSFetchedResultsController合作,将我的UITableView之一填入分组的数据中。现在我想在由无法获取的数据创建的所有获取部分的顶部添加一个新部分(我正在为此创建一个额外的数组)。是否有一种很好的方法来插入该数组而不会破坏所有不错的NSFetchedResultsController行为?

更新

到目前为止我尝试过的是手动调整indexPath的每次使用。当一个方法(即-tableView:numbersOfRowsInSection)被调用时,我检查它是否是第一部分,如果是,我会从我的数组而不是NSFetchedResultsController获取数据。如果没有,我只会创建一个新的NSIndexPath,其中包含原始indexPath的行,而部分-1则会访问fetchedResults。这似乎是一种相当天真的方法。至少,这对我(还)不起作用。

谢谢!
-f

1 个答案:

答案 0 :(得分:3)

我创建了一个混合了静态和动态部分的UITableViewDataSource。我是按照您的计划修改NSIndexPath来实现的。重要的是修改NSIndexPath的委托方法中的NSFetchedResultsControllerDelegate

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{
    indexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:kSectionWithAdditionalRowIndex];
    if (newIndexPath) {
        newIndexPath = [NSIndexPath indexPathForRow:newIndexPath.row + 1 inSection:kSectionWithAdditionalRowIndex];
    }

    [super controller:controller didChangeObject:anObject atIndexPath:indexPath forChangeType:type newIndexPath:newIndexPath];
}

该示例来自我的班级CBUIFetchResultsDataSource.m的子类,该类是由UITableViewDataSource提供支持的通用NSFetchedResultsController。我还必须覆盖-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section-(id)objectAtIndexPath:(NSIndexPath*)indexPath-(NSIndexPath*)indexPathForObject:(id)object