我是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]);
}
答案 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手册,以加快速度。