iOS委托不能使用performSegueWithIdentifier?

我有两个控制器(第一,第二)在故事板,xcode 4.2。

第一个控制器有一个tableview并embedded导航控制器。 第二个控制器也有一个桌面视图,并embedded导航控制器(不同于第一个)

在first.h中:

#import "second.h" ... @interface first : UIViewController <secondDelegate, UITableViewDelegate, UITableViewDataSource> ... 

在first.m:

 - (IBAction)add:(id)sender // action when tapped a button on topbar { [self performSegueWithIdentifier:@"addSegue" sender:sender]; } .... - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"addSegue"]) { NSLog(@"delegated"); second *controller=[segue destinationViewController]; controller.delegate=self; } } - (void)callback { NSLog(@"Callback here"); } 

Segue是默认转换的模态。

second.h:

 @protocol secondDelegate -(void)callback; @end .... id <secondDelegate> delegate; @property (nonatomic,assign) id <secondDelegate> delegate; 

second.m:

 ... (button of topbar tapped action) ... [self dismissModalViewControllerAnimated:YES]; NSLog(@"class: %@",[self delegate]); [[self delegate]entryGroupDoneButtonTapped]; 

概要:

我没有看到“callback这里”的消息,但我有一个“委托”消息。 “class:”debugging行打印“null”。

为什么?

(我可以发送任何数据从第一到第二,只有代表的callback不起作用)

我find了一个解决scheme: destinationViewController返回一个UInavigationController ,所以我们可以使用: AddDrinkViewController *controller=[[[segue destinationViewController]viewControllers]objectAtIndex:0];