无法通过导航控制器传递数据- 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
时,它是针对不在屏幕上的实例完成的。
您可以读取此值,例如在您的 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];
我使用的名称与您相同,但我建议您阅读一些编码指南并为您的 类 和变量使用不同的名称。
我有一个 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
时,它是针对不在屏幕上的实例完成的。
您可以读取此值,例如在您的 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];
我使用的名称与您相同,但我建议您阅读一些编码指南并为您的 类 和变量使用不同的名称。