私のアプリでは、Webサービスを呼び出してオブジェクトの配列に解析されるJSONを取得しています。時間のかかる部分は間違いなくWebサービスコールです。次のように私が望む動作は次のとおりです。UIActivityIndicatorを持つUIAlertViewが遅すぎる/スレッドの問題を表示します
- ユーザーは、現在のビューに関心
- の行を選択し、ActivtiyIndicatorのサブビューを持つAlertViewは新しいVCに
- データのロードを追加
- 新しいビューが
- AVインジケーターを表示されます行った
私のVCには、基本的に表示されるデータの配列をロードするdoLoadData
メソッドが装備されています各VCによって。たとえば:
AnimalViewController
は、ボタンを押すときないこと「ビュー犬」を持っている:
DogViewController *vc = [[DogViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
[vc release];
DogViewController
が財産NSArray *dogs
てしばらくが起こることを取る方法doLoadDogs
を、持っています。
現在、私は、 "ビュー犬" の方法にしている:
- ActivityIndicator
- とAlertViewの作成は
- それを表示すること
- がAlertView を隠すプッシュVC
- を作成します。
- リリースしていません。
これは難しいことではないようですが、私はまだこれをスレッド化して簡単に実装しています。
この(上記のコードブロック)が、今何が起こるかです::例として(当然これはあなたの実際の要件/コードに更新する必要があります)viewDogsは、と呼ばれる一時停止、新しい画面を(とデータとアクティビティインジケータ)が表示され、アクティビティインジケータが消え、黒いコーナーが消えます。私は何が起こりたいのですか:viewDogsが呼び出され、loadDogsが終了するまでその画面にアクティビティインジケータが表示され、新しいスクリーンが表示されます。 –
@ jshin47うん、それは良くありません。最も良いことは、読み込みコードを除外して、ブロックされず、終了時に何らかの方法で通知することです。 GCDを使ってこれを行うのは比較的簡単ですが、1つの方法ですべてをやりたいとは思わないでしょう。 –
@JasonCocoなぜ、別のスレッドでperformselectorの代わりにdispatch_asyncを使用するのですか? –