我有一個核心數據結構,其中聯繫人從服務器解析並與帳戶實體相關聯。創建崩潰I: 1.以用戶A登錄並創建聯繫人 2.登錄與用戶B和崩潰發生。核心數據NSRangeException多線程塊中的崩潰
很明顯,有一個空的NSArray導致這次崩潰。
所述的碰撞發生時,同時通過各服務器數據觸頭用performBlock的循環:
NSManagedObjectContext *mainMOC = self.managedObjectContext;
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
//NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[moc setParentContext:mainMOC];
[moc setUndoManager:nil];
BCRAccount *account2 = (BCRAccount*)[moc objectWithID:[self.loggedInAccount objectID]];
//[moc performBlockAndWait:^{
[moc performBlock:^{
//parse each contact
此外,我要求在一個單獨的方法中的每個接觸的取請求引用子管理對象:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:[BCRContact entityName]];
NSManagedObjectContext *managedObjectContext = childmoc;
NSArray *fectchresult = [managedObjectContext executeFetchRequest:fetch error:&error];
我想知道這是一對多還是一對一的關係問題。第一次登錄時,必須保留一些導致第二次登錄崩潰的數據。
*終止應用程序由於未捕獲的異常 'NSRangeException',原因是: '* - [__ NSArray0 objectAtIndex:]:指數15超越邊界空的NSArray' ***第一擲調用堆棧: (0x18be921c0 0x18a8cc55c 0x18bdfd3dc 0x10024c154 0x1920301b4 0x1920303e4 0x19201d98c 0x192035448 0x191dd17e8 0x191cea220 0x18f1aa188 0x18f19ee64 0x18f19ed24 0x18f11b7ec 0x18f142c58 0x18f143678 0x18be3f7dc 0x18be3d40c 0x18be3d89c 0x18bd6c048 0x18d7f2198 0x191d582fc 0x191d53034 0x10008e578 0x18ad505b8) 的libC++ abi.dylib:與類型的未捕獲的異常終止NSException
最後之前的所有這種解析發生我見th錯誤以及當一個單獨的服務被調用時: 2016-11-11 12:22:34.660266 AtEventUniversal [2223:781261]提供給CFRunLoopRunSpecific的無效模式'kCFRunLoopCommonModes' - 斷開_CFRunLoopError_RunCalledWithInvalidMode進行調試。此消息只會在每次執行時出現一次。
感謝您對這個爛攤子的任何提示。