4

特定のイベントでカメラ ロールのインデックスを作成し、ジョブを作成し、それらのジョブを 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つのクラスにあります。

複数のキューからライブラリにアクセスするのは間違っていますか?

4

0 に答える 0