ios - 如何实现 CoreData 记录的重新排序?

标签 ios core-data

我正在为我的 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/

相关文章:

iOS:删除所有核心数据 Swift

swift - 在运行时查找 CoreData 模型的实体

ios - 同步 UISlider 和 UIScrollView

ios - 每次打开 iOS 应用程序时都被迫创建新的 Quickblox session

ios - 如何比较 SKSpritenode 的 2 个纹理

ios - 无法在文件夹中写入 nsdata

ios - 使用核心数据进行应用程序设置

arrays - 将字符串数组保存到 CoreData

python - 使用 Alamofire iOS 以 Base64 将图像上传到服务器

ios - 如何在 iOS 的 Core Data 中存储 Swift 结构?