2014-04-09 76 views
0

我設立一個使用SplitViewController的iPad應用程序。在我的應用程序委託我在didFinishLaunchingWithOptions如下:混淆UINavigationControllers在SplitViewController

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0]; 
LeftViewController *leftViewController = (LeftViewController*)[leftNavController topViewController]; 
DetailViewController *detailViewController = [splitViewController.viewControllers objectAtIndex:1]; 
NSLog(@"Detail View Ctrl >> %@", [detailViewController class]); 

當我運行應用程序時,的NSLog語句返回「的UINavigationController」當DetailViewController實際上是的UIViewController的子類。但是,在XCode中,代碼完成將顯示在DetailViewController子類中實現的所有方法。有任何想法嗎?謝謝!

回答

2

我認爲你的DetailViewController實際上是嵌入在裏面的一個UINavigationController,而你的第四行出錯了。看看,而不是topViewController您拆分視圖控制器內的第二視圖控制器,就像你的LeftViewController做。

原因Xcode是繼續建議完成了DetailViewController方法,是因爲你已經給它那種類型。代碼完成不依賴於運行時行爲(它怎麼可能?) - 相反,它依賴於你輸入的代碼的靜態分析。如果你告訴Xcode某些東西是一個DetailViewController,它會相信你並根據這些信息自動完成。