【问题标题】:Weird Errors using CoreData with iCloud将 CoreData 与 iCloud 一起使用的奇怪错误
【发布时间】:2012-01-23 11:07:43
【问题描述】:

我使用来自新的 CoreData Recipes 项目 (iPhoneCoreDataRecipes Sample Code) 的示例代码在现有 iOS 应用程序中构建 iCloud 同步,该应用程序使用 CoreData SQLite“数据库”并结合了非常复杂的数据模型,其中包含许多 -太多的关系(也许这是我的问题的部分原因,或者至少是一个提示)。

在此之前,应用程序运行良好,没有任何关于数据库的警告。但是现在,当我将实体添加到上下文或尝试保存它时,调试器会因为这样的错误而发疯:

+[PFUbiquityPeerRange(UbiquityMethods) peerRangeForLocalPrimaryKey:inStoreNamed:andEntityName:inManagedObjectContext:](71): CoreData: Ubiquity:  Error or too many ranges for entity named: Room, ranges: (
"<PFUbiquityPeerRange: 0x627e0c0> (entity: PFUbiquityPeerRange; id: 0x627c830 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p12> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e300> (entity: PFUbiquityPeerRange; id: 0x627cfc0 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p13> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e350> (entity: PFUbiquityPeerRange; id: 0x627cfd0 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p21> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e3a0> (entity: PFUbiquityPeerRange; id: 0x627d300 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p42> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e3f0> (entity: PFUbiquityPeerRange; id: 0x627d310 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p49> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e440> (entity: PFUbiquityPeerRange; id: 0x627cea0 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p66> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e490> (entity: PFUbiquityPeerRange; id: 0x627ceb0 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p69> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e4e0> (entity: PFUbiquityPeerRange; id: 0x627cec0 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p75> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e530> (entity: PFUbiquityPeerRange; id: 0x627d120 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p82> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e580> (entity: PFUbiquityPeerRange; id: 0x627d130 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p94> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e5d0> (entity: PFUbiquityPeerRange; id: 0x627d140 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p96> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e620> (entity: PFUbiquityPeerRange; id: 0x627d150 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p97> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e670> (entity: PFUbiquityPeerRange; id: 0x627d160 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p132> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e6c0> (entity: PFUbiquityPeerRange; id: 0x627d170 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p140> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e710> (entity: PFUbiquityPeerRange; id: 0x627d180 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p156> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e760> (entity: PFUbiquityPeerRange; id: 0x627d190 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p157> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e7b0> (entity: PFUbiquityPeerRange; id: 0x627cd10 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p163> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e800> (entity: PFUbiquityPeerRange; id: 0x627cd20 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p177> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e850> (entity: PFUbiquityPeerRange; id: 0x627cd30 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p186> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e8a0> (entity: PFUbiquityPeerRange; id: 0x627cd40 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p192> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e8f0> (entity: PFUbiquityPeerRange; id: 0x627cd50 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p198> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e940> (entity: PFUbiquityPeerRange; id: 0x627cd60 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p199> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e990> (entity: PFUbiquityPeerRange; id: 0x627cd70 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p217> ; data: <fault>)",
"<PFUbiquityPeerRange: 0x627e9e0> (entity: PFUbiquityPeerRange; id: 0x627cd80 <x-coredata://A3F63A39-9034-4F81-8B35-911CC481B6C5/PFUbiquityPeerRange/p222> ; data: <fault>)")
, error: (null)

在抛出大量错误后,我收到内存警告,然后应用程序崩溃。我花了很多时间,但找不到关于 UbiquityMethods 添加的任何内容或找出错误的实际原因。再次重申:在使用 CoreData Recipes 示例项目中的代码创建 NSManagedObjectContext 和 NSPersistantStoreCoordinator 之前,该应用运行良好。

如果能提供任何帮助,我将不胜感激,当然,我会及时通知您有关该主题的最新信息!

最好的 本杰明

【问题讨论】:

  • 您确定您已正确设置与 iCloud 的连接吗?查看这个 SO 问题 - stackoverflow.com/questions/7768528/… 它帮助我从 iCloud 获取更新(现在我正在努力合并从 iCloud 获得的更改)

标签: iphone ios core-data icloud


【解决方案1】:

在配置 NSPersistentStoreCoordinator 实例时,检查您是否在权利文件中正确设置了密钥,并为 NSPersistentStoreUbiquitousContentNameKey 和 NSPersistentStoreUbiquitousContentURLKey 密钥设置了正确的值。示例见I'm not getting the NSPersistentStoreDidImportUbiquitousContentChangesNotification (with code sample)

【讨论】:

  • 我解决了我提到的问题。我认为原因是当应用程序第一次启动时,我用大量数据预填充了数据库。现在我一开始就把它留空了,错误就消失了(现在面临一些新的,但终于可以同步一些东西了)。
  • 我也有预填充数据的问题。我需要用默认的“类别”预填充数据库。如果互联网连接速度较慢(例如 3G),一段时间后第二台设备将有 2 组相同的类别。可能我会尝试干预合并过程并检查类别的名称。你有什么新问题?
  • 这是我现在要做的:如果 iCloud 第一次启用,我会创建两个上下文。一个用于旧数据库,一个用于启用 iCloud 的新数据库。然后我将所有旧数据转移到新的上下文中(花了很多迁移代码)。在从零开始的第二台设备上,所有数据都会在一段时间后出现(通常只有几秒钟)。这解决了预填充数据库的问题。当 iCloud 开始同步时,我仍然收到内存警告,尤其是在 iPod touch 4g 上。我还在检查是什么原因,可能是我的错。
  • 感谢您的信息!但是您如何确定 iCloud 是否是第一次启用?如果第二台设备开始离线怎么办?我找到了类似的方法 - devforums.apple.com/message/609574#609574 现在就尝试一下
  • 我已经在这里发布了我的问题 - stackoverflow.com/questions/9097541/… 因为我找不到解决它的方法
【解决方案2】:

这是一个有点旧的帖子,但它应该仍然能够澄清一些事情。

http://mentalfaculty.tumblr.com/post/25241910449/under-the-sheets-with-icloud-and-core-data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多