[英]move data to another view controller, but the 2nd view controller load first before 1st view controller
[英]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。
用于创建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.