如何在 Xcode 中从 AppDelegate.m 文件更新 UILabel 的文本?



我是Objective-C编程的新手。我想在应用程序进入后台时从UILabel和NSLog中获取文本。但我得到的只是一个空值。(我不知道为什么!)。我使用故事板来创建视图和UILabel,并使用CTRL+Drag将标签挂接到我的代码上,并在实现文件中合成它。但我只是在AppDelegate.m代码中得到一个空值。

这些是我的代码:

ViewController.h:

@property (strong, nonatomic) IBOutlet UILabel *Mylabel;

ViewController.m:

@synthesize Mylabel;

AppDelegate.m:

#import "ViewController.h"
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    ViewController * viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    NSLog(@"%@",[[viewController Mylabel] text]);
}
ViewController * viewController = (ViewController *)self.window.rootViewController;
NSLog(@"This is my text: %@", viewController.Mylabel.text);

由于您是Objective-C的新手,我将指出,您不应该每次都将您的属性值大写(又名Mylabel)。属性和方法总是使用驼色大小写。方法使用[]来调用您使用的属性。访问和设置的符号。您也不需要合成Mylabel,因为这是自动为您完成的。我建议你看看raywenderlich.com提供的《学徒的iOS》一书,了解最新情况。

您正在AppDelegate.mapplicationDidEnterBackground:方法中创建ViewController的新实例,而不是访问现有实例。作为快速修复方法,您应该找到指向现有实例的self.window.rootViewController点。因此,将您的代码更改为:

NSLog(@"Label text is %@",self.window.rootViewController.Mylabel.text);

请注意使用"点"表示法来访问属性(这更容易)。仅供参考,传统上属性以小写字母开头;你可能想把Mylabel改成Mylabel,养成这个习惯!

最新更新