Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将字符串从UINavigationController传递到ViewController_Ios_Objective C_Uinavigationcontroller - Fatal编程技术网

Ios 将字符串从UINavigationController传递到ViewController

Ios 将字符串从UINavigationController传递到ViewController,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我有三门课: 1.1.1视图控制器 2.水位控制器 3.水位控制器 - (IBAction)ParseBut:(id)sender { WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"]; [vc setUrl:@"My String"]; [self presen

我有三门课:

1.1.1视图控制器 2.水位控制器 3.水位控制器

- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}
我正在试着把一根绳子从第一根传到最后一根。但是我只把字符串从第一个传递到第二个。当我展示第三个ViewController时,它将是一个黑屏

我已尝试使WaterTableViewController成为故事板中WaterTableNaviController的根。 它确实显示了屏幕,但字符串没有传递

来自TyphonViewController

- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}
从水位控制器

- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}

您只需创建另一个singleton类并放置一个可以包含该字符串的属性,这样无论您身在何处,都可以读取该属性导航控制器中的代码是错误的-如果WaterTableVC是导航控制器的根视图控制器,它已经被实例化,因此您不应该再这样做。此外,您也不会推送到根视图控制器。您根本不需要对导航控制器进行子类化,就可以完成这里要做的事情。您应该从TyphonViewController中的按钮到导航控制器进行模式切换,并使WaterTableViewController成为该导航控制器的根视图控制器。按钮不应该有任何操作方法,因为它直接触发segue。相反,您应该在prepareForSegue中有以下代码

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UINavigationController *nav = segue.destinationViewController;
    WaterTableViewController *waterTableVC = (WaterTableViewController *)nav.topViewController;
    [waterTableVC setURL:@"My String"];
}

您使用InstanceEviewController WithiIdentifier而不是在故事板中使用segue有什么特别的原因吗?我认为这个解决方案并不奇怪,因为它遵循了最常用的设计模式之一,简化了这些操作,而忽略了所有其他好处。。。