0

LazyLoader を使用してアプリケーションに読み込まれた画像のリストがあり、データベースに画像を追加するときにこのリストを更新したいと考えています。NSURLConnection を使用して画像をロードします

4

1 に答える 1

2

私見、最も簡単なオプションは、コードをブロックに入れて非同期で実行することです。そうすれば、単純な流れを維持できます。

そのためには、次を使用します。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
^{

    // INSERT YOUR CODE HERE
    // Whatever you put in here will be executes asynchronously.
});

OPのコメントに応じて編集します。

NSURLConnection のメソッド:

- (id)initWithRequest:(NSURLRequest *)request delegate:(id < NSURLConnectionDelegate >)delegate

使用できません。ドキュメントによると:

接続のデリゲート オブジェクト。デリゲートは、ロードが進行するにつれてデリゲート メッセージを受け取ります。デリゲートへのメッセージは、このメソッドを呼び出すスレッドで送信されます。デフォルトでは、接続が正しく機能するには、呼び出しスレッドの実行ループがデフォルトの実行ループ モードで動作している必要があります。実行ループとモードを変更するには、scheduleInRunLoop:forMode: を参照してください。

解決策は、次を使用することです。

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

同期ロードを実行するために、呼び出し元のスレッドで特別なスレッド化や実行ループの構成は必要ありません。

または使用するには:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

ブロック完了ハンドラーを使用します。

注:
実行するタスクが要求が完了した後にのみ実行される場合 (デリゲートの呼び出しなど)sendAsynchronousRequest:queue:completionHandler:は、最適なオプションです。

于 2013-04-16T10:43:42.263 に答える