4

を使用してNSMutableDictionary、あるクラス(ViewControllerA)から別のクラス()にを渡す必要があります。次のコードを試しましたが、機能しません。私は実際にに渡しますが、メソッドは呼び出されません。なにか提案を?ありがとう!ViewControllerBNSNotificationCenterViewControllerB-receiveData

ViewControllerA.m

- (IBAction)nextView:(id)sender {
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"PassData"
     object:nil
     userInfo:myMutableDictionary];
    UIViewController *viewController =
    [[UIStoryboard storyboardWithName:@"MainStoryboard"
                               bundle:NULL] instantiateViewControllerWithIdentifier:@"viewcontrollerb"];
    [self presentViewController:viewController animated:YES completion:nil];
}

ViewControllerB.m

- (void)receiveData:(NSNotification *)notification {
    NSLog(@"Data received: %@", [notification userInfo]);
}

- (void)viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(receiveData:)
     name:@"PassData"
     object:nil];
}
4

1 に答える 1

2

NSNotificationCenterメソッドの呼び出しは問題ありません。考慮すべきいくつかの事柄:

  1. ViewControllerB-viewWillAppear:インスタンスは、呼び出されるまで通知に登録されないため、インスタンスをViewControllerBまだ表示していない場合(通常、AよりもVC階層の下位にある場合)、通知呼び出しを受け取ることはできません。で通知を登録-initWithNibName:bundle:することは、あなたが望むものである可能性が高くなります。

  2. ViewControllerBその結果は次のとおりです。通知を受信するには、通知を送信するときにのインスタンスが存在している必要があります。ViewControllerBから読み込んMainStoryboardでいる場合は-nextView:、まだ通知に登録されていません。

于 2013-03-24T15:25:37.593 に答える