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

时间:2014-08-30 14:51:51

标签: ios objective-c appdelegate

我是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]);
}

2 个答案:

答案 0 :(得分:1)

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

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

请注意使用'dot'表示法访问属性(更容易)。而且,仅供参考,传统认为属性以小写字母开头;您可能想将Mylabel更改为myLabel,以养成习惯!

答案 1 :(得分:0)

ViewController * viewController = (ViewController *)self.window.rootViewController;
NSLog(@"This is my text: %@", viewController.Mylabel.text);

当你是Objective-C的新手时,我会指出你不应该每个人都将你的财产价值大都化(AKA Mylabel)。始终使用驼峰案例的属性和方法。方法使用[]来调用您使用的属性。访问和设置的表示法。您也不需要合成Mylabel,因为这是自动完成的。我建议您查看raywenderlich.com提供的iOS by Apprentice手册,以加快速度。