0

テーブルの行を選択すると、navControllerのスタックに詳細ビューがプッシュされ、選択した行に関する詳細情報が表示されるように、navControllerとtableViewControllerを設定しています。詳細ビューでは、単一のUILabelを使用して情報を表示し、詳細ビューコントローラーのviewDidLoadでラベルのtextプロパティの値を設定します。

初めて行を選択すると、詳細ビ​​ューに期待されるテキストが表示されます。テーブルビューに戻って別の行を選択すると、詳細ビ​​ューに最初と同じテキストが表示されます。

詳細ビューコントローラーが解放され、navControllerのスタックにプッシュされた後にnilに設定されるコードサンプルをいくつか見ました。それをコードに追加すると、問題は解決しますが、理由がわかりません。

誰かがここで何が起こっているのか私に説明できますか?

ありがとう!

4

1 に答える 1

1

-viewDidLoadビューがロードされたときにのみ呼び出されます。つまり、View Controllerを初めて作成するときに、メモリに作成されたときです。代わりに、カスタマイズベースの入力データを実行する必要があります-viewWillAppear:。これは、ナビゲーションコントローラーにプッシュする前に毎回呼び出されます。

一般的には、新しいView Controllerをスタックにプッシュした直後にリリースしますが、それはもう自分のものではないため、NavigationControllerに属しています。この場合、次にスタックにプッシュすると、新しいオブジェクトであるため、ビューが再度読み込まれます。

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:screen animated:YES];
    [screen release];
}

ただし、主なアイデアは、ビューを表示するたびに変更される可能性のあるデータに基づいてビューをカスタマイズすることは、内で行う必要があるということです-viewWillAppear:。Interface Builderでできるよりもさらにビューをカスタマイズし、表示しているデータに関係なく変更されないものを変更するには、次の手順を実行する必要があります。-viewDidLoad

于 2009-08-07T14:38:31.697 に答える