我的iOS应用程序只是在NSRangeException上崩溃 – [NSManagedObjectContext save:].在任何地方找不到任何其他东西.我该如何解决这个问题?我没有任何内存地址或任何我可以使用的东西…
2015-04-22 14:16:38.078 heavenhelp[33559:1734247] *** Terminating app due to uncaught exception 'NSRangeException',reason: '*** -[__NSArrayM objectAtIndex:]: index 6 beyond bounds [0 .. 5]' *** First throw call stack: ( 0 CoreFoundation 0x0167f746 __exceptionPreprocess + 182 1 libobjc.A.dylib 0x00f40a97 objc_exception_throw + 44 2 CoreFoundation 0x01553b73 -[__NSArrayM objectAtIndex:] + 243 3 CoreData 0x00859cf3 -[NSsqlCore recordToManyChangesForObject:inRow:usingTimestamp:inserted:] + 2531 4 CoreData 0x00856a0b -[NSsqlCore _populateRow:fromObject:timestamp:inserted:] + 2923 5 CoreData 0x00776e24 -[NSsqlCore prepareForSave:] + 1764 6 CoreData 0x00775e3d -[NSsqlCore saveChanges:] + 461 7 CoreData 0x0073f15e -[NSsqlCore executeRequest:withContext:error:] + 638 8 CoreData 0x0083ee75 __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 5349 9 CoreData 0x008492ff gutsOfBlockToNSPersistentStoreCoordinatorPerform + 191 10 libdispatch.dylib 0x035f4bef _dispatch_client_callout + 14 11 libdispatch.dylib 0x035d7b0d _dispatch_barrier_sync_f_invoke + 144 12 libdispatch.dylib 0x035d723f dispatch_barrier_sync_f + 105 13 CoreData 0x008383f7 _perform + 183 14 CoreData 0x0073ec8b -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 459 15 CoreData 0x0076ee09 -[NSManagedObjectContext save:] + 1529 16 heavenhelp 0x000b6834 _TF10heavenhelp11saveContextFT_T_ + 324 17 heavenhelp 0x0015368d _TFC10heavenhelp26ConversationViewController17viewWillDisappearfS0_FSbT_ + 701 18 heavenhelp 0x001536ef _TToFC10heavenhelp26ConversationViewController17viewWillDisappearfS0_FSbT_ + 63 19 UIKit 0x020a4292 -[UIViewController _setViewAppearState:isAnimating:] + 706 20 UIKit 0x020a4904 -[UIViewController __viewWillDisappear:] + 106 21 UIKit 0x020bcd1d -[UIViewController(UIContainerViewControllerProtectedMethods) beginAppearanceTransition:animated:] + 200 22 UIKit 0x020cafec -[UINavigationController _startCustomTransition:] + 1028 23 UIKit 0x020d8e00 -[UINavigationController _startDeferredTransitionIfNeeded:] + 712 24 UIKit 0x020d9a51 -[UINavigationController __viewWillLayoutSubviews] + 57 25 UIKit 0x02253750 -[UILayoutContainerView layoutSubviews] + 213 26 UIKit 0x01fce57a -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 668 27 libobjc.A.dylib 0x00f56771 -[NSObject performSelector:withObject:] + 70 28 QuartzCore 0x01d5ee47 -[CALayer layoutSublayers] + 144 29 QuartzCore 0x01d52925 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 403 30 QuartzCore 0x01d5277a _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 31 QuartzCore 0x01caec52 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 284 32 QuartzCore 0x01cb00e5 _ZN2CA11Transaction6commitEv + 487 33 QuartzCore 0x01cb07fc _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92 34 CoreFoundation 0x015a086e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30 35 CoreFoundation 0x015a07b0 __CFRunLoopDoObservers + 400 36 CoreFoundation 0x015961ea __CFRunLoopRun + 1226 37 CoreFoundation 0x01595a5b CFRunLoopRunSpecific + 443 38 CoreFoundation 0x0159588b CFRunLoopRunInMode + 123 39 GraphicsServices 0x046cc2c9 GSEventRunModal + 192 40 GraphicsServices 0x046cc106 GSEventRun + 104 41 UIKit 0x01f3b106 UIApplicationMain + 1526 42 heavenhelp 0x000a5c94 main + 180 43 libdyld.dylib 0x0361fac9 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException
这是我用来保存的代码:thread-safe:
static var onceToken: dispatch_once_t = 0 static var singleton: CoreDataHelper! static var sharedInstance: CoreDataHelper { get { dispatch_once(&onceToken,{ self.singleton = CoreDataHelper() }) return singleton } }
我的xcdatamodeld(相关部分):
编辑:我已经编辑代码来反映我的更改,使我的NSManagedObjectContext线程安全.我现在做的一切,我在CoreDataHelper的一个实例上进行了我上面的初始化.我发现我可以通过进入一个对话,添加消息,进入另一个会话并在那里添加消息来触发崩溃.我已经添加了我的xcdatamodeld.
解决方法
我已经将谈话和消息之间的一对多关系设定为“订购”.这是不正确的…我已经改变了我的NSManagedObject的类使用NSMutableSet而不是NSMutableOrderedSet.
显然这会导致save方法中的NSRangeException …