我的問題是iOS 6選項卡式應用程序。我的工作進行中有5個選項卡,多個選項卡是其他視圖控制器的網關。大多數頁面都需要訪問Model對象,其中包含以數組,字符串等形式存儲的數據。在運行時填充裸骨模型,並且用戶可以在整個應用程序生命週期中添加它。例如,下面列出的代碼來自我的AppDelegate文件,它將一個指針指向裸機模型傳遞給Project View Controller。這工作正常:選項卡應用程序使用導航控制器數組堆棧;因爲我知道Project頁面位於索引2處,所以我可以將模型發送給它。無法在iOS6中的子ViewControllers之間傳遞指針
我的問題與項目頁面的子視圖有關。例如,作爲項目頁面的子視圖,存在(或應該是)用戶處理文件操作的File_IO頁面。 File_IO頁面還需要訪問Model對象。但是,當我嘗試從Project頁面發送Model指針到File_IO頁面時,我以前使用的技術(從AppDelegate到項目)不起作用。我指向FileIO ViewController中的一個空模型。
示例代碼:這是在AppDelegate中,它工作正常:項目視圖控制器中的裸機模型使用數據填充。
//To the Project View Controller...
UINavigationController *project_NavigationController =
[[tabBarController viewControllers] objectAtIndex:2];
Project_ViewController *project_ViewController =
[[project_NavigationController viewControllers] objectAtIndex:0];
//This hides the navigation bar on the project page but it also removes the bar on any subsequent pages! They need to be programmmatically reset in ViewDidLoad.
[project_NavigationController setNavigationBarHidden:YES animated:YES];
project_ViewController.currentGeoModel = newGeoModel;
現在,我的Project_ViewController嵌入在NavigationController並有4個個子ViweControllers。一個名爲FileIO_ViewController。我想將CurrentModel從Project_ViewController傳遞給FileIO_ViewController。在 - (void)viewDidLoad方法下,我嘗試了一些不起作用的東西。例如,
UINavigationController *project_NavigationController = (UINavigationController *) self.presentedViewController;
FileIO_ViewController *fileIO_ViewController = [[project_NavigationController viewControllers] objectAtIndex:1];
fileIO_ViewController.currentModel = currentModel;
編譯,但是當我嘗試訪問FileIO_ViewController方法內的currentModel時,它是空的。
如果任何人都可以花時間幫忙,我會非常感激。對我來說最好的答案是以一個明確的代碼示例的形式,顯示如何將指針傳遞給像我的模型這樣的對象,從ViewController到另一個ViewController,而您並不明確知道子VC所處的堆棧位置。 (在我的例子中,我使用索引1,但實際上我並不知道FileIO_ViewController在哪個索引中生存,因爲我在Project_ViewController下有三個其他ViewController。我試過了幾個整數,但沒有成功。)
如果你確實回答了這個問題,當談到iOS 6時,請考慮我是一個新人,而目標C--爬山蘋果已經很長時間了,而且我還沒有接近頂級呢!
感謝
蒂姆·雷德菲爾德 挪威
整個應用程序中是否存在單個模型對象,或者是否有多個單獨實例化的對象傳遞? – foundry
故事板,xib或全部代碼? – foundry