0

我將iOS應用程序設置爲單一視圖控制器。我打開和傳遞一個字符串到一個UINavigationController這是在一個單獨的故事板文件,用下面的代碼:無法通過UINavigation控制器傳遞數據 - iOS

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"RSSView" bundle:nil]; 
RSSNav *nav_view = [storyboard instantiateViewControllerWithIdentifier:@"RSSNav"]; 
nav_view.pass_nav_data = [NSString stringWithFormat:@"%@", [action_options objectAtIndex:indexPath.row]]; 
[self addChildViewController:nav_view]; 
nav_view.view.frame = self.view.frame; 
[self.view addSubview:nav_view.view]; 
[nav_view didMoveToParentViewController:self]; 

這一切工作正常,問題是,在UINavigationController的有一個叫RSSView RootViewController的(設置爲一個表視圖控制器)。我想將傳入的字符串從導航控制器傳遞給RSSView。

在導航控制器I有以下代碼,它試圖通過在字符串傳遞給的tableview控制器(在viewDidLoad方法設定):

// Pass in the RSS url data. 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"RSSView" bundle:nil]; 
RSSView *rss_view = [storyboard instantiateViewControllerWithIdentifier:@"RSSView"]; 
[rss_view setPass_data:pass_nav_data]; 

我可以將數據傳遞給導航控制器,但我無法將該數據傳遞給表視圖控制器。當我在表格視圖控制器中檢查傳入的字符串時,即使傳入的字符串不爲null,它也會以(null)的形式出現。

那又怎麼了?我想要做的就是傳入一次字符串值。

我真的不希望在這裏使用NSUserDefaults,但我想我將不得不,如果沒有辦法傳遞一個字符串值。

謝謝你的時間,丹。

回答

1

你正在做的是創建一個新的RSSView實例,它應該已經作爲你的導航控制器的根存在。因此,當您設置pass_data時,它將完成到不在屏幕上的實例。

您可以讀取此值,例如在RSSView通過做類似的viewDidLoad

RSSNav *nav_view = self.navigationController; 
[self setPass_data:nav_view.pass_nav_data]; 

我不知道,但這樣的事情也可能工作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"RSSView" bundle:nil]; 
RSSNav *nav_view = [storyboard instantiateViewControllerWithIdentifier:@"RSSNav"]; 
nav_view.pass_nav_data = [NSString stringWithFormat:@"%@", [action_options objectAtIndex:indexPath.row]]; 
[self addChildViewController:nav_view]; 

RSSView *rss_view = [nav_view visibleViewController]; 
[rss_view setPass_data:pass_nav_data]; 

nav_view.view.frame = self.view.frame; 
[self.view addSubview:nav_view.view]; 
[nav_view didMoveToParentViewController:self]; 

我使用相同的名字如你,但我建議你閱讀一些編碼指導,併爲你的類和變量使用不同的名稱。

相關問題