如何将数据从一个视图控制器传递到另一个嵌入在导航控制器中的视图控制器

How to pass data from one view controller to another view controller which is embedded in navigation controller

我能够将数据从一个视图控制器传递到另一个视图控制器,但是当我在导航控制器中嵌入 viewpapersViewController 时,数据没有传递, 我想在按下按钮时将数据传递给第二个视图控制器

最初是在按下按钮时发送请求,然后在 connectionDidFinishLoading

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

  // NSLog(@"Finish Loading");
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self->_responseData options:NSJSONReadingMutableLeaves error:&myError];


Papers *papersViewController =
[self.storyboard instantiateViewControllerWithIdentifier:@"Papers"];
papers = [[NSMutableArray alloc]init];
urls=[[NSMutableArray alloc]init];
for(id key in res) {

    NSString* name = [key objectForKey:@"name"];
    NSString* url =[key objectForKey:@"url"];

    [papers addObject:name];
    [urls addObject:url];

}

viewpapersViewController.exam = exam;
viewpapersViewController.papersName=papers;
viewpapersViewController.urls=urls;

[self presentViewController:viewpapersViewController animated:YES completion:Nil];

}

假设你想传递一个字符串,你可以通过以下步骤简单地传递你的数据:-

1- 继续第二个视图控制器并获取 -- NSString *str;

2- 当您从第一个视图控制器按下按钮时,直接传递数据
喜欢:- secondClassObject.str = FirstClassString。 3- 然后简单地推送您的导航。

通常情况下,我们会通过两种方式传递数据:

  1. 我们只是实例化目标 UIViewController,然后将数据传递给它的属性。
  2. 我们使用的另一种方式是 segue。本质上和第一种方式是一样的。

对于你的问题,我能想到的是你没有正确设置 UIViewController。 您可以先尝试获取 UINavigationController。 然后,使用此 属性 访问顶部 UIViewController:topViewController

如果您 ViewController 连接了同一个 Navigation Controller 。您必须通过从第一个视图拖动到第二个视图来执行从第一个视图到第二个视图的 PUSH Segue。点击里面的 Push 选项。您已经通过此设置了 Push Segue。

通过单击 2 个视图之间的 link 为要继续的标识符命名。

现在您可以通过

执行简单的 Segue
[self performSegueWithIdentifier:@"identifier for segue" sender:self];

现在在第一视图中

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"identifier segue"]){
    // Get the new view controller using [segue destinationViewController].
    2nd View *vc = [segue destinationViewController];
    2nd vc.variableName  = YES;
}}

在界面文件的第二个视图中 添加 属性

@property variable *variableName;