私は MagicalRecord を使用しており、このメソッドでエンティティのデータをインポートしています:
+(void)importEnduserOnBackgroundFromResponse:(id)responseObject
success:(void (^)(QNEnduser *provider))success
andFailure:(void (^)(NSError *error))failure
{
__block NSManagedObjectID *enduserID;
__block NSError *importError;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
QNEnduser *enduser = [QNEnduser MR_importFromObject:enduserDict inContext:localContext];
[localContext obtainPermanentIDsForObjects:localContext.insertedObjects.allObjects error:&importError];
enduserID = enduser.objectID;
} completion:^(BOOL successFlag, NSError *saveError) {
// Check for errors (importError and saveError), if no errors import the entity in the main context and call the success block
QNEnduser *newEnduser = (QNEnduser*)[[NSManagedObjectContext MR_defaultContext] objectWithID:enduserID];
}];
}
この問題にとって重要ではないため、完了ブロックのコードを少し削除したことに注意してください。
Xcode 5では、このコードは機能します。しかし、Xcode 6 Beta 6では、例外をスローします[localContext obtainPermanentIDsForObjects:localContext.insertedObjects.allObjects error:&importError];
私は同様の問題を見つけました ( GetPermanentIDsForObjects を呼び出すときにスレッドエラーを取得する、コアデータ: 子コンテキストは新しく挿入されたオブジェクトの永続的な objectID を取得しますか? )、しかしそれらは古く、私の場合、ご覧のとおり、解決策は機能しません。挿入されたすべてのオブジェクトの永続的な ID を取得しようと既に試みています (いずれにせよ重要ではありませんが、他に挿入されたオブジェクトはありません)。
他の誰かがこの問題を経験したことがありますか?それはベータ 6 の既知のバグですか?既知の回避策はありますか? それともやっぱり私のせい?
編集
どういうわけか例外を取得できません - Xcode で例外ブレークポイントを設定していますが@try/@catch
、不良行の周りに a を配置すると、何もキャッチされません。
例外ブレークポイントで停止したときのバックトレースは次のとおりです。
* thread #4: tid = 0x2f2a0, 0x0000000103f19973 libobjc.A.dylib`objc_exception_throw, queue = 'NSManagedObjectContext Queue', stop reason = breakpoint 1.3
frame #0: 0x0000000103f19973 libobjc.A.dylib`objc_exception_throw
frame #1: 0x0000000102333dd2 CoreData`-[NSPersistentStoreCoordinator(_NSInternalMethods) obtainPermanentIDsForObjects:error:] + 1458
frame #2: 0x00000001023aa16d CoreData`__99-[NSManagedObjectContext(_NestedContextSupport) _parentObtainPermanentIDsForObjects:context:error:]_block_invoke + 1037
frame #3: 0x0000000104f5772d libdispatch.dylib`_dispatch_client_callout + 8
frame #4: 0x0000000104f465d0 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 57
frame #5: 0x000000010233df92 CoreData`_perform + 114
frame #6: 0x00000001023a9bde CoreData`-[NSManagedObjectContext(_NestedContextSupport) _parentObtainPermanentIDsForObjects:context:error:] + 446
frame #7: 0x0000000102333592 CoreData`-[NSManagedObjectContext obtainPermanentIDsForObjects:error:] + 498
* frame #8: 0x000000010206fc28 QonnectAPIPod`__75+[QNImportHelper importEnduserOnBackgroundFromResponse:success:andFailure:]_block_invoke(.block_descriptor=<unavailable>, localContext=0x00007fd078dd8d60) + 568 at QNImportHelper.m:129
frame #9: 0x0000000102142abd QonnectAPIPod`__51+[MagicalRecord(.block_descriptor=0x00007fd078d026b0) saveWithBlock:completion:]_block_invoke + 25 at MagicalRecord+Actions.m:28
frame #10: 0x00000001023a461e CoreData`developerSubmittedBlockToNSManagedObjectContextPerform_privateasync + 78
frame #11: 0x0000000104f5772d libdispatch.dylib`_dispatch_client_callout + 8
frame #12: 0x0000000104f46dcf libdispatch.dylib`_dispatch_queue_drain + 481
frame #13: 0x0000000104f46b94 libdispatch.dylib`_dispatch_queue_invoke + 112
frame #14: 0x0000000104f479fc libdispatch.dylib`_dispatch_root_queue_drain + 81
frame #15: 0x0000000104f47d12 libdispatch.dylib`_dispatch_worker_thread2 + 40
frame #16: 0x00000001052ebef8 libsystem_pthread.dylib`_pthread_wqthread + 314
frame #17: 0x00000001052eefb9 libsystem_pthread.dylib`start_wqthread + 13