如何解决 UIManagedDocument 中的冲突?我应该使用 NSFileVersion 吗?

Posted

技术标签:

【中文标题】如何解决 UIManagedDocument 中的冲突?我应该使用 NSFileVersion 吗?【英文标题】:How to resolve conflicts in UIManagedDocument? Should I use NSFileVersion? 【发布时间】:2013-08-23 19:20:25 【问题描述】:

我浏览了很多 iCloud 文档。我可以找到 documentation on how to resolve conflicts 以及有关 iCloud 和 Core Data 的有用文档,例如 Designing for Core Data in iCloud 和 Using Core Data with iCloud Release Notes。但这些都没有解决如何专门使用 UIManagedDocument 解决 iCloud 冲突。

我应该将 NSFileVersion 与 UIManagedDocument 一起使用吗?

应该使用 NSFileVersion 解析 UIDocument。它的子类 UIManagedDocument 也是如此吗?

UIManagedDocuments 会自动解决冲突吗?

iCloud 和 Core Data 文档大量引用了NSPersistentStoreDidImportUbiquitousContentChangesNotification。此通知让您知道何时进行了更改,但不会通知您有冲突。这是否意味着冲突只是自动解决(可能基于 Core Data 日志中的时间戳)?

NSMergePolicy 和 NSMergeConflict 和 iCloud 有关系吗?

Core Data 也有 NSMergePolicy 和 NSMergeConflict 类,但文档没有提到 iCloud,而且似乎只适用于持久存储和托管上下文之间的冲突(而不是 iCloud 冲突)。所以这些不适用于 iCloud,对吗?

【问题讨论】:

【参考方案1】:

Apple 的文档在 iCloud Programming Guide for Core Data 中解决了这个问题。在 Design Your Core Data Stack to Be Efficient 小节中,它描述了 iCloud 冲突解决的处理方式与常规 Core Data 冲突解决的方式相同(即通过合并策略):

例如,当您想要合并在单独的托管对象上下文和持久存储协调器中进行的更改时,您通常会使用合并策略。相比之下,使用 iCloud,您可以使用合并策略来合并对多个对等点上的记录所做的更改。有关合并策略的进一步讨论,请参阅 Core Data Programming Guide 中的“Change Management”。

【讨论】:

以上是关于如何解决 UIManagedDocument 中的冲突?我应该使用 NSFileVersion 吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 iCloud 解决核心数据中的冲突

覆盖UIManagedDocument中的managedObjectModel

如何将现有的非文档核心数据存储转换为 uimanageddocument?

如何在调用 NSFetchedResultsController 方法之前确保 UIManagedDocument 准备就绪?

通过 UIManagedDocument 异步打开时如何确保 NSManagedObjectContext

UIManagedDocument 中对父 NSManagedObjectContext 的后台队列更改导致合并时 NSFetchedresultsController 中的重复