我在 iPhone 应用程序中使用 CoreData,但 CoreData 不提供允许您对记录重新排序的自动方法。我想过使用另一列来存储订单信息,但是使用连续数字作为排序索引有问题。如果我正在处理大量数据,重新排序记录可能涉及更新排序信息上的大量记录(这有点像更改数组元素的顺序)
实施高效订购方案的最佳方法是什么?
FetchedResultsController 及其委托不适合用于用户驱动的模型更改。看Apple 参考文档。
查找用户驱动的更新部分。因此,如果您寻找某种神奇的单行方式,遗憾的是,没有这样的方式。
您需要做的是在此方法中进行更新:
- (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)中实现了这一点,并且运行良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)