0

私は非同期を使い始めましたが、返されたデータを取得するのは面倒でした。それから私はクラスメソッドを使い始めましたが、それはデリゲートメソッドを使う可能性を排除したと私は信じています。それで、これが問題になることを知って、同期を維持しましたが、解決策でこれほど難しいとは思いませんでした。UIを相互作用可能に保ちながら、データを取得するための最良の方法は何ですか?

4

3 に答える 3

2

同期NSURLConnectionsはNSOperation内でうまく機能します。同期的に使用しているため、NSOperationsに渡されたNSOperationQueueは自動的にバックグラウンドスレッドを使用して実行します(それ以外の場合は追加の作業を行う必要があります)。

URL接続をバッ​​クグラウンドスレッドで動作させることは、UIの応答性を維持するための鍵であり、非同期NSURLOperationはデフォルトでは実行しません(データコールバックがすべてどのスレッドで行われるかを確認してください)。

着信データを処理したい場合(プログレスバーがある場合など)、そのような場合は非同期URL接続の方が優れていますが、NSOperationに含めることができます。

これはイライラするので、NSOperationに基づく代替のASIHTTPRequestライブラリを確認することをお勧めしますが、これにより苦痛が軽減される可能性があります(優れたサンプルコードがあります)。

http://allseeing-i.com/ASIHTTPRequest/

于 2009-12-24T00:48:21.300 に答える
2

NSURLConnection同期呼び出しは、バックグラウンドスレッドでスタックできるはずですが、「面倒」に対処し、RightWay™を実行することを強くお勧めします。UIをインタラクティブに保ちながらデータを取得する最良の方法は、NSURLConnectionの非同期メソッドを使用することです。

于 2009-12-23T22:30:15.683 に答える
1

興味深いことに、データの取得に関してどのような問題がありますか?非常に便利なソリューションであることが終わったときに、非同期NSURLConnectionとNSNotificaionを使用していることがわかりました。

データが必要なクラス(通常はinitメソッドに入れます)

-(id)init{
    ... object setup ...
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];
}

updateViewは、接続がデータの受信を終了したときに呼び出されるメソッドです。

NSURLConnectionで

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

//Notify that we are finished
[[NSNotificationCenter defaultCenter] postNotificationName:soapAction object:self];

}

これは私にとって非常にうまく機能します-NSURLConnectionはスレッド化されているため、UIがロックされず、データのダウンロードが完了すると更新されます。

于 2009-12-23T22:42:39.130 に答える