0

アイテムのリストを含むtableViewがあります。選択が行われると、新しいViewControllerがtableViewのnavigationControllerviewControllerスタックにプッシュされます。

私の質問はこれです:プッシュされたビューコントローラに関連付けられたビュー階層のビューの1つは、コンテンツをレンダリングする前にネットワークからデータをフェッチする必要があります。このフェッチは、[NSURLRequest requestWithURL:...]を介して非同期で実行されます。データを必要とするビューにデータを渡し、そのビューにオーバーロードされたdrawRectメソッドを呼び出させる適切な方法は何ですか?現在、私はこれを行います:

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


    [_connection release];
    _connection = nil;

    [self performSelectorOnMainThread:@selector(GetDataFromCloudAndCreateView)
                        withObject:nil 
                     waitUntilDone:NO];


}

GetDataFromCloudAndCreateViewメソッドは、データからビューをインスタンス化します。残念ながら、何もレンダリングされていません。[myView setNeedsDisplay]を試しましたが、効果がありません。

誰かがこれを行うための適切な方法をスケッチできますか?ありがとう。

4

1 に答える 1

1

このような場合に私が過去に行ったことはUIViewControllerconnectionDidFinishLoading:メソッドで新しいものを作成してからプッシュすることです。そのようです:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [_connection release];
    _connection = nil;

    // Code to stop a loading indicator of some kind

    UIViewController *newView = [[SomeViewController alloc] initWithData:fetchedData];
    [self.navigationController pushViewController:newView animated:YES];
}

新しいコントローラーのinitWithData:メソッドは、渡したデータに基づいて必要なインスタンス変数を処理し、ビューが読み込まれると、それらの変数に基づいてビューを描画します。

それがあなたの質問に答えることを願っています。

于 2009-09-30T23:33:10.520 に答える