2017-07-26 79 views
0

我在一年前购买了Ensembles支持,但可悲的是现在只能尝试使用它。Ensembles文档设计

我有一个支持多个核心数据文档的应用程序,并试图确定发现它们的最佳方法。在你的书中,你建议使用自定义注册表来支持plist文件的文档元数据可能是实现文档发现,名称更改等的最佳方式。我设计了一种方法来实现这一点,但是意识到一旦我去“更新“(通过使用相同的文件名进行更改并上传到云)文件的plist文件我收到错误:

2017-07-26 10:54:16.986553-0700 XXX [6080:2429554]由于现有项目,某些记录无法上传。通常由于CloudKit上的过时查询缓存。会自我纠正。忽略:defaultOwner)=

这让我意识到它与设计中的另一个问题相矛盾......文件并不意味着被删除并重新上传,因为这样就存在竞争条件,最终可能会导致数据损坏。

是否有一种特定的方式,您认为plist文件可以更新,以便您可以信任其中的数据,或者您应该上传带有时间戳名称的新plist文件,并“希望”数据已正确合并。

您能否详细介绍一下您的设计理论,以了解如何用Ensembles解决文档注册的问题?

谢谢 海梅

回答

0

其实是有一种方法来检测,而无需使用像这样的属性列表或任何存在哪些文件。 CDEPersistentStoreEnsemble上有一个叫做+retrieveEnsembleIdentifiersFromCloudFileSystem:completion:的类功能。

https://github.com/drewmccormack/ensembles/blob/master/Framework/Source/Ensemble/CDEPersistentStoreEnsemble.h#L392

这将通过完成处理程序返回合奏标识符的阵列。如果您将您的合唱团与您的文档文件名称相同,则应该能够找出云数据中存在的内容,而无需同步plists或类似的东西。

+0

嗨德鲁,我想我应该明确表示,我确实想维护一个plist来为特定文档提供一个动态标识符。推理是要跟踪商店是否必须被删除,并因此移动到另一个标识符或迁移到另一个核心数据模型版本。还有其他一些原因,但这些是最大的。考虑到这一要求,当信息需要更新时,如何建议维护这样的注册表,从而必须对文件进行更改。您在书中暗示了这一点,但没有说明应该如何实施。 –

+0

我仍然认为你应该使用我提到的方法来获取云文档,并使用该信息更新每个设备上的本地plist。即不同步plist。这样,您可以看到删除等。请注意,您可以通过在合并的完成块中的CDEPersistentStoreEnsemble的nonCriticalErrorCodes属性中查找CDEErrorCodeUnknownModelVersion来检测由于模型更改而导致的错误。 –