首先,有一点背景。我对iOS开发很陌生,很久以来我一直在.NET网站上,这可能就是为什么我甚至会问这个问题,但这里就是这样。将数据从一个视图控制器传递到另一个视图控制器; iOS <= 4 vs iOS 5
基本设置是这样的。你有一个UINavigationController
与RootViewController
我们会打电话给MasterViewController
。当此MasterViewController发生某些操作时,我们想要钻入DetailsViewController
。但是,我们也想将一些数据传递给DetailsViewController
。
这是我的理解,这在SDK的早期版本(之前的iOS 5)的方法是类同的:
@implementation MasterViewController
-(IBAction)someAction
{
DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
dvc.someDataProp = [self getSomeDataSomeHow];
[[self navigationController] pushViewController:dvc animated:YES];
}
@end
然而现在,在iOS 5中,似乎这是现在做使用Storyboard并继续。在Xcode中设置了从MasterViewController的SEGUE到DetailsViewController,然后在代码中你做这样的事情:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
我的问题基本上是这样的:旧的做法在某种程度上感觉更清洁了很多给我。您正在非常明确地指出要推进导航堆栈的ViewController
类型,并且您可以轻松地设置属性。但在新方法中,destinationViewController
的类型为id
(出于显而易见的原因),它对我来说感觉不那么干净。再次,这可能是我的.Net方面出来,但这在iOS中很常见?只需使用身份证,并谨慎对待风?
非常尊重质疑如何做到这一点,而不是简单地复制和粘贴片段。我也有类似的问题,并在这里有一些经验是我的答案:在iOS5中,我看到UI逻辑被分成两部分:1)ViewController生命周期和转换2)数据流。Storyboard负责1,开发人员需要照顾2.在这种情况下,这些演员将会发生。对我而言,问题是,这种分裂是否有意义?这两个概念可以分离吗?我猜苹果会这样,我们会看到它是如何运作的。 – Guven 2012-04-10 16:17:32