使用 ZSync 和 CoreData 同步时如何调试“未指定实体”

Posted

技术标签:

【中文标题】使用 ZSync 和 CoreData 同步时如何调试“未指定实体”【英文标题】:How to debug 'no entities specified' when working with ZSync and CoreData Syncing 【发布时间】:2010-03-22 22:08:28 【问题描述】:

我正在尝试让 ZSync 在桌面和 iPhone 应用程序之间工作。我已经设置了我的模式,并且我的 MOM 和我的模式之间的所有信息都匹配,所以我应该很高兴。但是,当我启动同步时,我收到此错误。

|其他|错误|同步服务 [ISyncSession 中的前提条件失败 _validateClient:entityNames:beforeDate:clientHasTruthForEntityNames:target:selector:]: 没有指定实体

任何人都知道这意味着什么,以及如何调试它? 我是这个 SyncServices 东西的新手。 干杯!

更新

好的,我已经在 syncrospector 中显示了它,但仍然出现无法识别的错误。 你是什​​么意思我在守护进程的客户描述是错误的? 谢谢。

更新

好的,我有 clientDescription 工作,但现在当它触发时:

ZAssert([[ISyncManager sharedManager] registerSchemaWithBundlePath:path], @"注册同步模式失败");

我得到这个错误:(

[注意:此异常起源于 服务器。] *** -[NSCFArray insertObject:atIndex:]: 尝试 插入零

【问题讨论】:

【参考方案1】:

这是您的同步服务设置中的一个问题。这意味着您尚未声明需要同步哪些实体。我建议将您的 SyncSchema 子项目(针对您的桌面应用程序端)与 SampleDesktop 项目中包含的子项目进行比较。

更新

我检查了所有这些,但无济于事。我正在使用版本化的妈妈,这会有所不同吗?在我的 ManagedObjectModels 中,我应该使用版本名称还是集合名称? (妈妈还是妈妈?)谢谢,我快到了!

不,架构应该指向您的最新模型。您确定它指向正确吗?这可能是最棘手的部分之一。您是在模式包中包含模型还是引用它?

更新

首先,请把这些更新放到你的问题中,评论部分真的不适合他们。

好的,解决了这个问题。同步现在开始我得到“无法注册客户端,因为:名为 Xmac 的客户端想要同步名为:X.Entity 的无法识别的实体”,遗憾的是,我的所有实体都会发生这种情况。

此错误意味着您的同步架构仍然不完全有效。您的桌面客户端是否同步?

你能在同步检测器中看到它的数据吗?

如果是这样,那么您在守护进程中的客户端描述是错误的。如果它不同步,那么首先解决这个问题,因为听起来您的 SyncSchema 捆绑包仍然不正确。我建议尝试将其与项目中包含的 sampleDesktop 应用程序进行比较。

更新同步检查器

好的,我已经在同步检查器中显示了它,但仍然出现无法识别的错误。你是什​​么意思我在守护进程的客户描述是错误的?谢谢。

我猜你在同步检查器中看到了你所有的实体和数据?

在 Daemon 上有一个 clientDescription.plist。此 plist 描述了守护程序将与哪些数据同步。该 plist 需要更新(因为默认的 plist 是指示例应用程序等)以引用您的数据结构,就像您的桌面应用程序一样。

在不久的将来,这篇文章将被移到插件中,这样您就不会直接修改守护进程。预计在接下来的几周内会看到项目本身的更新。但是现在,(并且可以重复使用),修改守护进程内的 plist,你应该准备好同步了。

更新 ZAssert

该行展开为:

BOOL success = [[ISyncManager sharedManager] registerSchemaWithBundlePath:path];
NSAssert(success, @"Failed to register sync schema");

有几件事会导致这种情况:

    您的路径为零,请在调试器中检查 您的同步架构有问题。

您还看到了哪些其他调试 cmets?

【讨论】:

我检查了所有这些,但无济于事。我正在使用版本化的妈妈,这会有所不同吗?在我的 ManagedObjectModels 中,我应该使用版本名称还是集合名称? (妈妈还是妈妈?)谢谢,我快到了! 好的,解决了这个问题。同步现在开始我得到“注册客户端失败,因为:名为 Xmac 的客户端想要同步名为:X.Entity 的无法识别的实体”,遗憾的是,我的所有实体都会发生这种情况。 在syncClient中调整代码时,出现“路径../../../X处的托管对象模型无效”

以上是关于使用 ZSync 和 CoreData 同步时如何调试“未指定实体”的主要内容,如果未能解决你的问题,请参考以下文章

同步核心数据:iOS 到 OSX,反之亦然

使用 RestKit 和 CoreData 同步修改对象的正确方法

CoreData与CloudKit同步时将图像保存到CoreData?

App 如何根据需要动态为 CoreData 开启 CloudKit 云同步功能

App 如何根据需要动态为 CoreData 开启 CloudKit 云同步功能

iOS:RESTKit 与 CoreData 同步数据