【问题标题】:crash on coredata ios8核心数据 ios 8 崩溃
【发布时间】:2014-11-09 21:33:24
【问题描述】:

我在保存时 CoreData 崩溃了:

2014-09-16 09:51:58.273 My_app[2678:105246] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001087413f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001083dabb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010874132d +[NSException raise:format:] + 205
    3   CoreFoundation                      0x000000010871274f mutateError + 159
    4   CoreData                            0x000000010672ae56 -[_NSSQLGenerator prepareMasterReorderStatementPart2ForRelationship:] + 118
    5   CoreData                            0x0000000106792fd8 -[NSSQLAdapter newCorrelationMasterReorderStatementPart2ForRelationship:] + 72
    6   CoreData                            0x00000001067a9751 -[NSSQLiteConnection writeCorrelationMasterReordersFromTracker:] + 817
    7   CoreData                            0x00000001067aa061 -[NSSQLiteConnection writeCorrelationChangesFromTracker:] + 65
    8   CoreData                            0x000000010679c617 -[NSSQLCore writeChanges] + 1351
    9   CoreData                            0x00000001066dfadf -[NSSQLCore saveChanges:] + 479
    10  CoreData                            0x00000001066b0ee4 -[NSSQLCore executeRequest:withContext:error:] + 484
    11  CoreData                            0x00000001067868f2 __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 4354
    12  CoreData                            0x000000010678e7ee gutsOfBlockToNSPersistentStoreCoordinatorPerform + 190
    13  libdispatch.dylib                   0x00000001091e27f4 _dispatch_client_callout + 8
    14  libdispatch.dylib                   0x00000001091c9848 _dispatch_barrier_sync_f_invoke + 365
    15  CoreData                            0x00000001067813d5 _perform + 197
    16  CoreData                            0x00000001066b0ac8 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 504
    17  CoreData                            0x00000001066d9d2d -[NSManagedObjectContext save:] + 1213

同样的代码在 ios7 中也可以使用。

有没有人有同样的崩溃?

【问题讨论】:

  • 这个错误似乎很明显。您是否尝试找到错误所在的行?如果是,你能显示代码吗?
  • 我也遇到了同样的崩溃。你提交过错误吗?
  • 是的,我提交了一个错误。似乎崩溃只出现在模拟器上。您是否设法在设备上重现它?为了“修复”它,我只是用 try catch 包围了 save 调用:数据已正确保存。
  • 我只在 iOS 8 模拟器上遇到了同样的崩溃(设备很好)。它似乎与更新使用一对多有序关系的实体有关。我将尝试将其提炼成示例项目并提交错误报告。
  • 我也在尝试解决同样的问题,目前我发现的解决方法是对反向关系进行排序,但我仍然不清楚这是否是一个错误方法有问题...

标签: ios objective-c core-data ios8


【解决方案1】:

我看到了同样的问题并尝试应用@knl 提到的解决方法。 但是,使关系以两种方式排序似乎有一个严重的副作用。

我注意到如果我调整了一个实体中的关系顺序,它会弄乱同一实体的其他对象中的关系顺序。

假设我们有两个实体,Company 和 Employee。 “Company”与“Employee”之间存在“employees”关系,这是一种有序对多的关系。另一方面,“Employee”与“Company”有反向关系,称为“companies”,也是一种有序对多的关系。 (最初 Employee.companies 只是一个多对多关系,但后来我将其更改为有序多对多关系作为解决方法。)

现在,假设有两个 Company 对象,A 和 B,我发现如果我更改 A.employees 中对象的顺序,B.employees 中对象的顺序也会受到影响。我需要提到 A.employees 在私有子上下文中进行了调整,当子上下文被保存并因此更改被推回父上下文时,B.employees 被更改。

我添加了一些日志,看起来虽然这些更改仅在 A.employees 中进行,但它确实触发了全局连锁效应。核心数据整合了 A.employees 中的每个对象(X),并删除了 X.companies 中的所有 Company 对象,然后以任意顺序再次添加它们,这导致了我正在谈论的问题。

我不知道这是核心数据中的错误还是设计行为。如果这是一个错误,那么我可能需要向 Apple 报告它,但如果这是一种设计行为,那么另一种解决方法是什么?

【讨论】:

    【解决方案2】:

    只是总结一下帮助我解决这个问题的 cmets:

    • 这似乎是 Core Data 中与 有序多对多关系相关的错误
    • 如果您必须保留 有序 选项,似乎有一种解决方法:使关系双向有序(感谢@Fabio Ritrovato)。

    【讨论】:

    • 谢谢!在这个答案和stackoverflow.com/questions/7385439/… 之间,我能够解决一个花了我一天时间的问题!谢谢!!!
    • 谢谢!我花了几天时间,终于摆脱了这个异常,这要归功于你(和@Fabio Ritrivato)的解决方案
    【解决方案3】:

    我也在 iOS 8 模拟器上看到了这个确切的错误,无法弄清楚我做错了什么。我能够通过使用@try/@catch 来解决这个问题,但我宁愿了解冲突在哪里,或者我是否做错了什么。

    @Ryan - 你有可以在这里发布的苹果问题/链接吗?示例项目呢?

    【讨论】:

      【解决方案4】:

      一些 nsstring 附加一个 nil 值

      【讨论】:

      • 感谢您的回答。但是字符串类型的所有属性在我的模型中都是可选的。它在 ios7 上使用相同的数据效果很好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2023-03-14
      • 2018-09-02
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多