从appDelegate更新另一个视图控制器中的标签

4
我希望能够从appDelegate更新一个viewController中的标签。在IB中,视图控制器中的标签已经全部链接并设置了属性。
在appDelegate.h文件中,我创建了一个ivar来访问视图控制器中的标签,就像这样:
someViewController *myView;

在AppDelegate.m文件中

myView.theLabel.text = @"Whatever";

我也尝试过 myView.theLabel setText: @"whatever";
我还尝试将myView变成一个属性并合成它。我把这段代码放在applicationDidFinishLaunchingapplicationWillEnterForeground中,但标签从未更新。有什么更好的方法吗?

你是在应用程序委托中实例化控制器,还是通过其他方式获取对该控制器实例的引用? - Alladinian
@Alladinian 在.h文件中,正如我所提到的,我创建了一个ivar someViewController *myView,并通过这种方式访问标签。someViewController.h头文件被添加到appDelegate.h和appDelegate.m中,除此之外我不确定你指的是什么。谢谢回复。 - Alex McPherson
@Alladinian 抱歉我有点笨,我没有从appdelegate实例化视图控制器,我应该在访问标签上方执行吗?我正在访问someViewController *myView = [[someViewController alloc]initWithNibName:@"someViewController" blah blah。 - Alex McPherson
要在控制器中设置标签,您必须在分配/初始化/呈现后获取其引用。您的视图控制器在何处以及如何添加到窗口中? - Alladinian
1个回答

3
我想你的myView可能还未被创建,因此你得到了一个空引用。尝试以下代码来验证这个理论:
someViewController *myView;
if(myView)
    NSLog(@"Object has been created");
else
    NSLog(@"You have a null reference - The Object hasn't been created yet");

如果是这种情况,请将该行更改为以下内容以创建它:
someViewController *myView = [[someViewController alloc] initWithNibName:@"SomeViewController" bundle:nil];
myView.theLabel.text = @"Something";
self.window.rootViewController = myView;

是的,您可以在appDelegate中创建第一个视图,然后将rootViewController设置为该视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接