2016-11-11 8 views
0

私は、サーバから連絡先が解析され、アカウントエンティティに関連付けられたコアデータ構造を持っています。クラッシュIを作成するには: 1.ユーザAとログインして連絡先を作成してください 2.ログインユーザーBとクラッシュが発生します。コアデータNSRangeExceptionマルチスレッドブロックでクラッシュする

明らかに、このクラッシュを引き起こす空のNSArrayがあります。また

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 

は、私は別の方法で各連絡先のフェッチ要求を呼び出し、子の管理オブジェクトを参照する:performBlockとサーバーのデータに連絡先の各を通じてループしながら

クラッシュが発生し

NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:[BCRContact entityName]]; 
NSManagedObjectContext *managedObjectContext = childmoc; 

NSArray *fectchresult = [managedObjectContext executeFetchRequest:fetch error:&error]; 

多対多関係であるかどうかは疑問です。 2回目のログインクラッシュに寄与する最初のログインからのデータが残っている必要があります。

*キャッチされない例外により 'NSRangeException'、理由にアプリを終了: '* - [__ NSArray0 objectAtIndex:]:空のNSArrayのための境界を越えた指標15' は***まずスローコールスタック: (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

のキャッチされない例外で終了参照してください 2016-11-11 12:22:34.660266 AtEventUniversal [2223:781261]無効なモード 'kCFRunLoopCommonModes'がCFRunLoopRunSpecificに提供されました - デバッグするために_CFRunLoopError_RunCalledWithInvalidModeでブレークします。このメッセージは、実行ごとに1回だけ表示されます。

この混乱のヒントありがとうございます。

答えて

0

クラッシュの原因を知らない状況では、例外をキャッチするには、Exception Breakpoint...Symbolic breakpoint...を使用する必要があります。

screenshot

関連する問題