0

内で、それをコア データ アクセスに使用する他のメソッドperformBlockに渡します。managedObjectContextmanagedObjectContextであり、 を親としてNSPrivateQueueConcurrencyType持っています。NSMainQueueconCurrencyTypeフェッチ要求の実行内で呼び出されたメソッドの 1 つが呼び出されるとすぐにperformBlock、アプリケーションはエラーなしで終了します。OS X コンソールは次のように出力します。

BUG in libdispatch client: kevent[EVFILT_VNODE] add: "Bad file descriptor" - 0x9

誰がこれを引き起こしているのか考えていますか?

XCode 4.5.2 と iOS 6 を使用しています。

アップデート

SenTestingKitこの問題は、静的ライブラリとしてのケース内でのみ発生することがわかりました。ライブラリを通常の iOS アプリに含めると、それはなくなってしまいます。何か案は?

4

1 に答える 1

1

バックグラウンド スレッドで実行するように設計されたオブジェクトを にラップすると、子コンテキストと親コンテキストの間のキュー ブロック エラーが軽減さNSBlockOperationれます。NSOperationQueue

performBlock子コンテキストの呼び出しも削除する必要があります。子は、親コンテキストを使用して親コンテキストを自動的に呼び出すプライベート キューの親キューへの要求を自動的に行いますperformBlockコードがたまたまメイン スレッドで実行されていない場合、既存の呼び出しは機能しますが、メイン スレッドで実行されている場合 (子と親がメイン スレッドをロックしている場合)、単体テストで発生するデッドロックが発生します。これが Apple によって文書化されているのを見た唯一の場所は、この 2012 WWDC ビデオでした。

https://developer.apple.com/videos/wwdc/2012/?id=214

于 2013-01-23T01:27:35.630 に答える