首先,有一點背景。我對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