Ios 某些代码未在从另一个ViewController调用的方法中执行
我的问题Ios 某些代码未在从另一个ViewController调用的方法中执行,ios,iphone,objective-c,uiviewcontroller,label,Ios,Iphone,Objective C,Uiviewcontroller,Label,我的问题 我有一个标准的UIViewController。按下按钮,它将加载一个表单模态视图控制器。当按下一个UIBarButtonItem来关闭这个模式视图时,我通过以下操作调用一个方法: ViewController *main = [[ViewController alloc] initWithNibName:nil bundle:nil]; [main updateLabel]; 在主ViewController中的方法-(void)updateLabel中,我正在设置标签的文本,但
我有一个标准的
UIViewController
。按下按钮,它将加载一个表单模态视图控制器。当按下一个UIBarButtonItem
来关闭这个模式视图时,我通过以下操作调用一个方法:
ViewController *main = [[ViewController alloc] initWithNibName:nil bundle:nil];
[main updateLabel];
在主ViewController
中的方法-(void)updateLabel
中,我正在设置标签的文本,但标签不会更改。但我知道函数会被调用,因为如果我执行NSLog(@“方法调用测试”);
而不是label.text=@“测试”
我可以在控制台中看到消息
我做错了什么?这一定是我在主ViewController
中调用方法的方式,因为我可以在其他任何地方轻松更改标签
我想做什么:
解除模态视图控制器时,我希望在主视图控制器中调用一个方法,在本例中,更改标签的文本
感谢您的帮助!您正在使用该代码创建ViewController的新实例,而没有得到指向您已有的实例的指针 如果ViewController是显示模态视图的控制器,则可以使用
ViewController *main = self.presentingViewController;
更好的方法是使用委托模式 下面是一个设计模式建议
模态视图控制器不应该知道如何消除自身,这是呈现视图控制器的责任。毕竟,它可以以多种不同的方式呈现(模态、popover、推送导航)。使用委托模式,模态视图控制器将告诉其委托人,当按下条形按钮项时,应将其解除。然后,作为演示视图控制器的委托人将解除模态视图并更新问题中提到的标签。这将发出警告:不兼容的指针类型初始化g“ViewController*”和类型为“UIViewController*”的表达式@ifraaank,只需添加一个cast,(ViewController*)self.presentingViewController