私は毎回20の結果を返すWebサービスを持っています(それはサービスプロバイダの制限です)。私はこのサービスを10〜20回繰り返して呼び出し、毎回UIを更新したいと思っています。 この状況にはベストプラクティスがありますか?私はサーバーを呼び出している間、UIをブロックしたくありません。これにより、進行中の操作中にユーザーがアクションを実行したい場合に問題が発生します (現在のページからナビゲートするようなもの) ありがとうございます!Webサービスを繰り返し、目的のc
答えて
バックグラウンドスレッドでWebサービスを呼び出し、必要なデータを収集してメインスレッドに戻り、UIを更新することができます。
バックグラウンドプロセスでUIを更新することは推奨されていないため、上記(バックグラウンドスレッドからメインスレッドへのジャンプ)を行っています。
あなたが変更することができます [self performSelectorOnMainThread:@selector(myMainFunction) withObject:nil waitUntilDone:YES];
..
[self performSelectorInBackground:@selector(MyWebService) withObject:nil];//you can pass any object if you have
を使用して、バックグラウンドでのWebServiceあなたを呼び出すことができますし、バックグラウンドタスクは、あなたがすることができる上にあるときにメインスレッドに戻ってきて最後のパラメータはwaitUntilDone:No
です。これにより、ユーザーはUIが更新されるまで待つ必要はありません。彼らはそこにタスクを運ぶことができます。
NSTimer
を使用して定期的にwebServiceを呼び出すことができます。
希望に応じて:
お返事ありがとうございます。私はASIHTTPRequestを使用してサーバーへの同期呼び出しを使用しています。私の問題は、応答を同期させ、ユーザーが何か他のことをやっているときにページから離れるようなことを止めることです... –
あなたはそのユーザーがそのUIにいるかどうかを知らせるブール値を入れることができます。彼は別のビューに移動することができます。あなたはboolをyesに設定できます。反復では、そのブールがイエスならばその反復を破るという条件を設定します。 –
これはまさに私がやったことです。しかし、ユーザーが新しい検索を行い、最後の検索結果が途中で残っている場合はどうなりますか?私は混合結果を得る! (途中でリクエストを止めることはできません...) –
どのように情報を表示するかによって異なります。
あなたは非同期接続(バックグラウンドで同期接続を呼び出すよりも私の意見では、より効果的)とそのデリゲートを使用している場合、それはユーザーインターフェイスをブロックしないでください。
- (void)loadData {
NSString *urlString = @"http://www.stackoverflow.com";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:self];
}
// delegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
// clear out or intialize instance data variable
[myData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[myData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// convert data to whatever it's supposed to be (for example, array)
NSString *dataString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSArray *dataArray = [parser parseStringToArray:dataString];
[myArray addObjectsFromArray:dataArray];
//update tableview either using reload data (instant) or using updates (for smooth animation)
}
することができますその後、 didFinishLoading:メソッドの最後にloadDataメソッドを呼び出してループします。
- 1. APIテスト目的で指定したhttpステータスコードを返すWebサービス?
- 2. C#WPF ListViewの項目を繰り返します。
- 3. forループの繰り返しを繰り返す方法C#?
- 4. Azure Appサービスの繰り返しタスク
- 5. のXPagesは - 繰り返し項目
- 6. 行と項目のAngularJS繰り返し -
- 7. 繰り返しC#Regex replace
- 8. Spring Web MVCと繰り返しの動的ページ要素
- 9. C++初心者 - 繰り返しループ最初の繰り返しを繰り返す
- 10. 目的C - iOS、画面外の静的テーブルセル内のUILabelsを繰り返します。
- 11. 特定の繰り返しの項目のリストを返すExcel
- 12. C++を繰り返すタイプ
- 13. C++コンソールアプリケーションでのコマンドの繰り返し
- 14. Cでのdatarowの繰り返し#
- 15. C配列を繰り返します。
- 16. C#MapLocationFinderResultを繰り返します。
- 17. C#ヌルチェック付きの繰り返しコード
- 18. C# - 私的な空からのアクションを繰り返す
- 19. プログラムは3回目の繰り返し(HTTPWebRequest)でハングします。C#
- 20. 目的地Cを使用してSharePoint WebサービスGetListItemsを呼び出す方法
- 21. 動的配列と繰り返し値
- 22. C++無限ループ繰り返し
- 23. 配列は、C(繰り返し)
- 24. quickfix/C++のグループを繰り返す
- 25. C#スイッチのケースを繰り返す
- 26. RecyclerViewの他の項目の画像を繰り返します
- 27. 繰り返し
- 28. 繰り返し
- 29. 目的c - 戻り値を使用しないオブジェクト返却メソッド
- 30. 私のカスタムリストビューアダプターが最後の項目を繰り返します
あなたは、Webサービスの通信が完了するのを待っている間にUIをブロックしたくないという点では間違いありません。私はどのようにWebサービス(NSURLConnection?)とやりとりしているのか分かりませんが、非同期的なやり方が必要です。同期メソッドしかない場合は、Grand Central Dispatchを調べることをお勧めします。 –