无法通过导航控制器传递数据- iOS

Cannot pass data via UINavigation controller- iOS

我有一个 iOS 应用程序设置为单一视图控制器。我正在打开一个字符串并将其传递给 UINavigationController,它位于一个单独的故事板文件中,代码如下:

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 的根视图控制器(设置为 Table 视图控制器)。我想将传入的字符串从导航控制器传递到 RSSView。

在导航控制器中,我有以下代码试图将传入的字符串传递给 table视图控制器(在 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];

我可以将数据传递给导航控制器,但无法将该数据传递给 table 视图控制器。当我在 table 视图控制器中检查传入的字符串时,它以 (null) 的形式出现,即使我传入的字符串不为空。

所以怎么了?我想要做的就是传入一次字符串值。

我真的不想在这里求助于 NSUserDefaults,但我想我将不得不使用,如果没有办法传入一个字符串值的话。

丹,谢谢你的时间。

您正在做的是为您的 RSSView 创建一个新实例,它应该已经作为导航控制器的根目录存在。因此,当您设置 pass_data 时,它是针对不在屏幕上的实例完成的。

您可以读取此值,例如在您的 RSSViewviewDidLoad 中,通过执行以下操作:

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];

我使用的名称与您相同,但我建议您阅读一些编码指南并为您的 类 和变量使用不同的名称。