我正在为我的 iPhone 应用程序使用 CoreData,但 CoreData 不提供允许您重新排序记录的自动方式。我想用另一列来存储订单信息,但是使用连续的数字来排序索引有问题。如果我要处理大量数据,重新排序记录可能涉及更新大量记录的排序信息(这有点像更改数组元素的顺序)
实现高效订购方案的最佳方式是什么?
最佳答案
FetchedResultsController 及其委托(delegate)不适用于用户驱动的模型更改。参见 the Apple reference doc . 查找用户驱动的更新部分。因此,遗憾的是,如果您寻找某种神奇的单行方式,那是不可能的。
您需要做的是在此方法中进行更新:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
userDrivenDataModelChange = YES;
...[UPDATE THE MODEL then SAVE CONTEXT]...
userDrivenDataModelChange = NO;
}
并且还阻止通知做任何事情,因为用户已经完成了更改:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
if (userDrivenDataModelChange) return;
...
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
if (userDrivenDataModelChange) return;
...
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
if (userDrivenDataModelChange) return;
...
}
我刚刚在我的待办事项应用程序 (Quickie) 中实现了它并且运行良好。
关于ios - 如何实现 CoreData 记录的重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1077568/