A Bb < ----- > a
假设我们有两个设备(1)和(2)开始完全同步.每个都有一个A类对象和一个B类对象,它们彼此相关联.在设备1上,我们有对象A1和B1,在设备B上我们有相同的逻辑对象A1和B1.
现在假设在每个设备上进行了模拟更改:
On device 1,we delete B1,insert B2,and associate A1 with B2. Then
save changes.
On device 2,insert B3,and associate A1
with B3. Then save changes.
设备1现在尝试从设备2导入事务日志.将插入B3,并且A1将与B3关联.到目前为止一直很好,但是现在B2的关系等于零. a关系是非可选的,因此会发生验证错误.
设备2上会出现类似的情况,因为有两个B对象,并且只有一个A对象要关联.因此必须始终存在验证错误,因为B对象中的一个必须具有设置为nil的关系.
更糟糕的是,任何未来的更改都会留下错误的B对象,因此验证失败.实际上,用户无法通过重置关系来自行解决问题.它永久地被打破了.
问题是,如何解决这样的验证错误?这一切都发生在触发NSPersistentStoreDIDimportUbiquitousContentChangesNotification通知之前.它不是您的应用程序主NSManagedobjectContext中的验证错误,它是在将事务日志初始导入持久性存储期间发生的验证错误.
我能想到的唯一选择可能是尝试删除自定义setter(setA :)中的无效B对象,或者在B类本身上删除KVC验证方法(valIDateA:error :),因为这些似乎确实如此.在事务日志导入期间触发.但我不确定是否允许这样的副作用,当我尝试它时,它确实会导致令人讨厌的日志消息.
任何人都知道处理这个问题的正确方法是什么?
解决方法 在Apple的开发者论坛上查看此主题:https://devforums.apple.com/message/641930#641930
有一位Apple员工的回复.简而言之:
1)这是在当前版本的iOS(5.1)和OS X(10.7.3)下Core Data iCloud同步中的已知错误.
2)如果关系对于验证谓词是非可选的,则同步将完全停止.因此,您需要删除有关时间的验证以保持流畅.但是,这样做会使设备的数据不匹配.
3)没有正式的解决方法.一种混乱的方法是保持跟踪关系的单独属性.然后,您需要扫描通过iCloud更改的任何对象并修复关系(如果它是nil).
我也被这个错误所困扰.处理遇到麻烦的客户非常沮丧.希望很快得到Apple的解决方案……
总结以上是内存溢出为你收集整理的macos – 核心数据iCloud同步中的关系完整性和验证全部内容,希望文章能够帮你解决macos – 核心数据iCloud同步中的关系完整性和验证所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)