0

あるView Controller間で次のView Controllerにデータを渡そうとしている単純なマスター/ディテールアプリケーションがあります。ユーザーがからオプションを選択するモーダルView Controllerとして表示されるView Controllerが1つあり、選択UIPickerViewした行に応じて文字列が設定されます。ただし、View Controller が のdismissed場合、文字列は null です。ユーザーがモーダル ビュー コントローラーのログイン ボタンを選択すると、マスター ビュー コントローラーが設定された文字列を使用してメソッドを開始するように通知が送信されUIPickerViewますが、文字列が null であるため失敗し続けます。各View ControllerとivarのプロパティとしてparserURLを設定しました。

モーダル ビュー コントローラーで文字列を設定するコードを次に示します。

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    MasterViewController *master = [[MasterViewController alloc] init];

    if (row == 0) {
        [self.dropdownButton setImage:[UIImage imageNamed:@"dropdown"] forState:UIControlStateNormal];
    }
    if (row == 1) {
        [self.dropdownButton setImage:[UIImage imageNamed:@"hbm"] forState:UIControlStateNormal];
        [master setParserURL:@"http://98.246.50.81/firecom/xml/HBM.xml"];
        NSLog(@"URL = %@", master.parserURL);
    }
    if (row == 2) {
        [self.dropdownButton setImage:[UIImage imageNamed:@"hwh"] forState:UIControlStateNormal];
        [master setParserURL:@"http://98.246.50.81/firecom/xml/HWH.xml"];
    }
}

ログインボタン IBAction:

-(IBAction)loginButton:(id)sender {

    [self dismissViewControllerAnimated:YES completion:nil];
    [[NSNotificationCenter defaultCenter] postNotificationName: @"login" object: nil];

}
4

3 に答える 3

1

問題は、マスター インスタンスではなく、この機会に初期化したばかりの別のインスタンスで文字列を設定していることです。


それを達成する方法はたくさんあります。アプリケーションの全体的なアーキテクチャに応じて。
最も簡単ですが、あまり良い方法ではありませんが、マスターで詳細ビューコントローラーを作成するときにこれを行うことです
DetailVC *dVC = [[DetailVC alloc] initWithNib:@"DetailVC" bundle:nil];
dVC.masterReference = self;

次に、詳細View Controllerで、次のように直接参照できます。これは、マスターView Controllerself.masterRefenceを指します。original

于 2012-12-13T23:42:23.153 に答える
0

.h ファイルをコーディングのページにインポートしましたか?

于 2012-12-13T23:55:11.217 に答える
0

ビューコントローラー間でデータを渡す最良の方法は、Core Data を使用することだと思います。この機能が ios でどのように機能するかについて調査を行う必要があります。長期的には役立ちます。

于 2012-12-26T23:58:59.717 に答える