特定のイベントでカメラ ロールのインデックスを作成し、ジョブを作成し、それらのジョブを CoreData に書き込むイメージ アップローダーを作成しています。別のスレッドが CoreData から読み取り、画像をアップロードします。
UI がフリーズし続けます。GUI がフリーズしても、バックグラウンド キューが引き続き機能していることがわかります。ブレークする (一時停止ボタンを押す) と、メインスレッドは通常このようになっていることがわかります
#0 0x38773ad4 in semaphore_wait_trap ()
#1 0x387e6b10 in _os_semaphore_wait ()
#2 0x386bf76a in _dispatch_barrier_sync_f_slow ()
#3 0x2dc50992 in -[NSManagedObjectContext performBlockAndWait:] ()
#4 0x2d5cb37e in -[ALAssetsLibrary _performBlockAndWait:] ()
#5 0x2d5d06d4 in -[ALAssetPrivate _performBlockAndWait:] ()
#6 0x2d5c4e52 in -[ALAsset defaultRepresentation] ()
#7 my code.... various methods that ar using the asset library
通常のフォーラムを精査しましたが、キューと ALAssetsLibrary に関する多くの情報が見つからないようです。
私のコードについてもう少し話しましょう。画像は (_processingQueue を使用して) インデックス付けされ、コア データに書き込まれるため、(メイン キューを使用して) ビュー コントローラーにデータを渡すブロックがいくつかあります (# インデックス付け、# スキップなど)。メインキューにキャストされますが、問題はありません。
画像は CoreData から取り出されてアップロードされるため、アップロードの進行状況バーなどを移動する同様のメソッドがあります。再びメイン キューにキャストされます。
ここで何が問題になると思いますか?ALAssetsLibrary にアクセスする私のメソッドは、@synchonized(self) ブロックに続きます。これはすべて1つのクラスにあります。
複数のキューからライブラリにアクセスするのは間違っていますか?