2012-01-27 54 views
0

我想从PickDateController传递的NSDate到DetailViewControllerPickDateController我有一个IBAction为如下:如何正确传递使用故事板的NSDate?

-(IBAction)doneDate:(id)sender{ 

NSLog(@"Date Here DPC = %@", [datePicker.date description]); //This shows fine 
dateLabel.text = [datePicker.date description]; //This also shows. 

DetailViewController *controller = [[[DetailViewController alloc] init] autorelease]; 

NSDate *dateSel = datePicker.date; 
[controller setDateSelected:dateSel]; //This DOES NOT go to DetailViewController 
controller.dateSelected = dateSel; //This doesn't work either 

[self.navigationController popViewControllerAnimated:YES]; 

} 

对于像我这样一个虚拟的我失去了什么? 如何在DetailViewController上编写 - (void)setDateSelected {}?或者这不是问题?

+1

是'故事板的DetailViewController'一部分吗?有没有之间的任何塞格斯这些控制器?如果你使用'alloc/init',你不会让故事板实例化控制器。如果你在这些控制器之间有一个连接,你不需要创建一个新的控制器,而是在你的视图控制器中实现'prepareForSegue' – 2012-01-27 17:07:42

+0

是这两个控制器都是故事板的一部分,从DetailViewController到PickDateController有一个segue,所以我想我可以只是popViewController来“关闭”PickDateController,但是t他变量不会传递给DetailViewController。选择日期后,是否必须创建另一个继续返回DetailViewController的继续? – Farini 2012-01-27 17:27:11

+1

不,你需要在你的'PickDateController'上创建一个'PickDateControllerDelegate'和'delegate'属性。然后,您可以在“DetailViewController”的'prepareForSegue'方法中将委托设置为您的调用'DetailViewController'。您现在可以通过'PickDateController'中的'self.delegate'来访问它。看一看http://www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2就是一个很好的例子。基本上,规则是:赛格斯只能进入“进”,从不“回”。 – 2012-01-27 18:16:30

回答

1

考虑到有控制器和之间存在塞格斯DetailViewController做了一个顺着接下去PickDateController

如果使用alloc/init,你不会得到通过故事板实例化的控制器。如果你在这些之间有一个连接,你不需要创建一个新的控制器,而是在你的视图控制器中实现prepareForSegue来创建一个“反向通道”(为了将信息传递回去,你不能创建一个新的反向通道只有走“中”,从不“回”): 你需要创建一个类的PickDateControllerDelegate并在您PickDateController委托属性然后,您可以将delegate设为您的通话DetailViewController,在你DetailViewControllerprepareForSegue方法

您现在可以通过self.delegate从您的PickDateController访问它,因此在被解散/从导航堆栈中取消之前报告任何信息delegate可以也应该用于通知呼叫控制呃它可以解雇PickDateController(而不是解雇自己)。

Beginning Storyboards, part 2是这样做(你可以,如果你不使用ARC尚未使用assignretain属性weakstrong一个很好的参考。