11

私は興味深い問題に遭遇しました.私はメインViewControllerを持っています.navigationControllerで彼をMainVCと呼びましょう. したがって、popViewControllerAnimated を実行しようとしているときに、SecVC から MainVc にデータを渡したいと考えています。私がprepareForSegueを使用し、ローカルパラメーターを使用するように..

ありがとうございました...

4

5 に答える 5

16

最善の選択肢はDelegateを使用することであることに同意しますが、それでも別のものを探している場合は、代わりにNSNotificationCenterを使用できます。

MainVCのviewDidLoadでは:

- (void)viewDidLoad
{

    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(recvData:)
                                             name:@"SecVCPopped"
                                           object:nil];
}

MainVC.m にメソッドrecvDataを追加します。

- (void) recvData:(NSNotification *) notification
{

    NSDictionary* userInfo = notification.userInfo;
    int messageTotal = [[userInfo objectForKey:@"total"] intValue];
    NSLog (@"Successfully received data from notification! %i", messageTotal);
}

SecVC で、ポップする前に、次の行を追加します。

NSMutableDictionary* userInfo = [NSMutableDictionary dictionary];
[userInfo setObject:[NSNumber numberWithInt:messageTotal] forKey:@"total"];

NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"SecVCPopped" object:self userInfo:userInfo];
于 2013-12-06T13:27:26.310 に答える
1

私は次のいずれかの方法でそれを行いますが、それが十分にエレガントであるかどうかはわかりません...

  1. SecVCで、呼び出す前に@property MainVC *mainVC;使用を追加します[self.mainVC setSomeValue:...];[self.navigationController popViewControllerAnimated:...];

  2. [self.navigationControllerviewControllers]を使用します; を見つけて、をポップするコード行の前にMainVC *mainVC呼び出します。[mainVC setSomeValue:...];ViewController

これは、あなたの望むことですか?

于 2012-11-22T09:55:31.197 に答える