編集:このスレッドの元のタイトルは「2 番目のマネージド オブジェクト モデルの作成時にクラッシュする」でしたが、問題は解決され、問題は上記のタイトルのとおりであることが判明しました。
TL;DR:NSFetchRequests
複数のNSManagedObjectContext
オブジェクトで再利用しないでください。答えを参照してください。
NSEntityDescription の再利用がうまくいかないことに関連していると思われる問題が発生しています。
ユーザーごとに Core Data を使用し、ユーザーがログインおよびログアウトできるようにするアプリがあります。各セッションには、コア データ スタックと呼ばれるものがあり、マネージド オブジェクト モデル、ストア コーディネーター、および使用するコンテキスト階層をロードします。ユーザーがログアウトすると、スタックが解放され、モデル、コーディネーター、およびコンテキストが解放されます。ただし、ユーザーが再度ログインすると、クラッシュが発生します。ゾンビを有効にすると、次のようになります。
2014-04-30 11:31:50.755 CPiPhoneSSLVPN[65981:907] *** -[NSEntityDescription name]: message sent to deallocated instance 0x19888170
これは、フェッチを実行しようとするたびに発生します。私は Core Data スタックをいじり、モデルを静的にしました (オンデマンドで一度ロードされ、リリースされることはありません)。これは期待どおりに機能します。問題は、アプリが実行時にセキュリティ ポリシーに準拠するようにモデル エンティティを変更することです (たとえば、特定のプロパティを一時的にして、ディスクに保存されないようにします)。したがって、モデルを作成することは実行可能な解決策ではありません。
クラッシュのバックトレースは次のとおりです。
* thread #1: tid = 0x3c6736, 0x02793411 CoreFoundation`___forwarding___ + 769, name = 'Main', queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
* frame #0: 0x02793411 CoreFoundation`___forwarding___ + 769
frame #1: 0x027930ee CoreFoundation`__forwarding_prep_0___ + 14
frame #2: 0x0319e71e CoreData`fetchPlanAllocateInitialize + 206
frame #3: 0x0319e2e4 CoreData`-[NSSQLCore objectsForFetchRequest:inContext:] + 644
frame #4: 0x0319ddcf CoreData`-[NSSQLCore executeRequest:withContext:error:] + 383
frame #5: 0x0319d7f2 CoreData`-[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 4466
frame #6: 0x0319af56 CoreData`-[NSManagedObjectContext executeFetchRequest:error:] + 566
frame #7: 0x031efd86 CoreData`-[NSManagedObjectContext(_NestedContextSupport) _parentObjectsForFetchRequest:inContext:error:] + 502
frame #8: 0x0326da14 CoreData`__82-[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:]_block_invoke + 676
frame #9: 0x031efb81 CoreData`internalBlockToNSManagedObjectContextPerform + 17
frame #10: 0x06c2d4d0 libdispatch.dylib`_dispatch_client_callout + 14
frame #11: 0x06c1c439 libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 80
frame #12: 0x06c2d4d0 libdispatch.dylib`_dispatch_client_callout + 14
frame #13: 0x06c1b726 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 340
frame #14: 0x0280843e CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
frame #15: 0x027495cb CoreFoundation`__CFRunLoopRun + 1963
frame #16: 0x027489d3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #17: 0x027487eb CoreFoundation`CFRunLoopRunInMode + 123
frame #18: 0x062335ee GraphicsServices`GSEventRunModal + 192
frame #19: 0x0623342b GraphicsServices`GSEventRun + 104
frame #20: 0x048ddf9b UIKit`UIApplicationMain + 1225
frame #21: 0x0003b0e6 CPiPhoneSSLVPN`main(argc=1, argv=0xbfffed7c) + 86 at main.m:17
誰もこの種の問題を見たことがありますか?任意のヒント?
この問題のバグ レポート 16767152 を開きました。