Some code not executing in a method called from an

2019-08-08 04:15发布

My problem
I have a standard UIViewController. With the press of a button, it loads a form sheet modal view controller. When dismissing this modal view with the press of a UIBarButtonItem I call a method by doing:

ViewController *main = [[ViewController alloc] initWithNibName:nil bundle:nil];
[main updateLabel];

In the method -(void)updateLabel in the main ViewController I'm setting the text of a label, but the label won't change. But I know the function gets called, because if I do a NSLog(@"Method call test); instead of label.text = @"Test" I can see the message in console.

What am I doing wrong? It must be the way I'm calling the method in the main ViewController, because I can easily change the label anywhere else.

What I want to do:
When dismissing a modal view controller, I want a method to be called in the main view controller, and in this case change the text of a label.

Thanks for your help!

2条回答
ゆ 、 Hurt°
2楼-- · 2019-08-08 05:01

You're creating a new instance of ViewController with that code, not getting a pointer to the one you already have.

If ViewController is the controller that presented the modal view, then you can get a pointer to it with,

ViewController *main = self.presentingViewController;
查看更多
劳资没心,怎么记你
3楼-- · 2019-08-08 05:06

A better way to do this would be to use the delegate pattern.

https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html

The following is a design pattern suggestion

The modal view controller shouldn't know how to dismiss itself, that is the responsibility of the presenting view controller. After all, it could have been presented in many different ways (modally, popover, push navigation). Using the delegate pattern, the modal view controller would tell its delegate that it should be dismissed when the bar button item gets pressed. The delegate, which is the presenting view controller, would then dismiss the modal view and update the label mentioned in your question.

查看更多
登录 后发表回答