崩溃的核心数据ios 8

时间:2014-09-16 08:06:21

标签: ios objective-c core-data ios8

当我保存时,我对Core Data很着迷:

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。

是否有人遭遇同样的崩溃?

4 个答案:

答案 0 :(得分:8)

总结一下帮助我解决此问题的评论:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我看到了同样的问题,并尝试应用@knl提到的解决方法。 然而,似乎以两种方式订购关系会产生严重的副作用。

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

假设我们有两个实体,公司和员工。 “公司”与“员工”有“雇员”关系,这是一种有序的多对多关系。另一方面,“员工”与称为“公司”的“公司”具有反向关系,这也是一种有序的多对多关系。 (最初Employee.companies只是一个多对多的关系,但后来我把它改为订购多人关系作为解决方法。)

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

我添加了一些日志,似乎虽然这些更改仅在A.employees中进行,但确实触发了全局链式效应。核心数据集成了A.employees中的每个对象(X)并删除了X.companies中的所有公司对象,然后以任意顺序将它们重新添加回来,这引起了我所说的问题。

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

答案 3 :(得分:-3)

某些nsstring附加一个零值