繁体   English   中英

ios从第二个视图控制器向第一个视图控制器发送Objective-c数据发送

[英]ios Delegate Objective-c data sending from 2nd view controller to 1st view controller

我有2个视图控制器。 第一个是UIview控制器,第二个是表视图控制器。 我想在选择第二个视图控制器的行后将第二个(表视图控制器)的数据发送到第一个(uiview控制器)。 为此,我写了一个委托协议。 但是我的委托协议不起作用...我发现了问题。我正在创建的第二个视图控制器的对象。

address = [[second_viewcontroller alloc] init];
address.delegate = self;

与second_viewcontroller视图控制器页面的self不同。 如何使这两个相同。

self = [[second_viewcontroller alloc] init];

您的问题我的委托协议不起作用...我解决了问题。我正在创建的第二个视图控制器的对象。 地址= [[second_viewcontroller分配] init]; address.delegate =自我; 与second_viewcontroller视图控制器页面的self不同。

很明显,您创建second_viewcontroller对象的方式不正确。

您必须从ViewController故事板标识符创建对象。 首先将Storyboard ID从Storyboard提供给ViewController,然后执行步骤给给Storyboard ID。

  1. 在情节提要中选择特定的ViewController。
  2. 转到IdentityInspector。
  3. 在IdentityInspector下,有Identity部分,并在“ Storyboard ID”字段中添加情节提要ID。

用于创建ViewController对象的语法。

Second_viewController *aVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Second_viewController"];
aVC.delegate = self;

我假设您是从情节提要中调用Second_ViewController的,而不是通过编程方式进行的。

在这种情况下,可以在prepareForSegue中访问Second_ViewController的正确实例。 为此,您需要设置一个Storyboard Segue标识符,例如“ Second_ViewController”

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"Second_ViewController"]) {

        SecondViewController *aSecVC = segue.destinationViewController;
        // Register the Delegate to self.So when we call the delegate method from secondVC, SendMessage will be call of ViewController
        aSecVC.delegate = self;

    }
}

如果您使用alloc-init或InstantiateViewControllerWithIdentifier,则在使用情节提要推segue时,它将创建另一个实例。

是,因为您实例化了第二个视图控制器的新实例。 根据我从问题中得出的结论,我想如果您从导航堆栈中获取secondViewController的实例,它应该可以工作

我为您创建了一个示例项目,以获取有关如何使用NSUserDefaults向后传递数据的基本知识。 GitHub尝试一下。 希望对您有帮助。 项目URL 使用Objective-C中的NSUserDefaults向后传递数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM