我正在与NSFetchedResultsController
合作,将我的UITableView
之一填入分组的数据中。现在我想在由无法获取的数据创建的所有获取部分的顶部添加一个新部分(我正在为此创建一个额外的数组)。是否有一种很好的方法来插入该数组而不会破坏所有不错的NSFetchedResultsController
行为?
更新
到目前为止我尝试过的是手动调整indexPath
的每次使用。当一个方法(即-tableView:numbersOfRowsInSection
)被调用时,我检查它是否是第一部分,如果是,我会从我的数组而不是NSFetchedResultsController
获取数据。如果没有,我只会创建一个新的NSIndexPath
,其中包含原始indexPath
的行,而部分-1则会访问fetchedResults
。这似乎是一种相当天真的方法。至少,这对我(还)不起作用。
谢谢!
-f
答案 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
。