我是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.m
的applicationDidEnterBackground:
方法中创建ViewController的新实例,而不是访问现有实例。作为快速修复方法,您应该找到指向现有实例的self.window.rootViewController
点。因此,将您的代码更改为:
NSLog(@"Label text is %@",self.window.rootViewController.Mylabel.text);
请注意使用"点"表示法来访问属性(这更容易)。仅供参考,传统上属性以小写字母开头;你可能想把Mylabel改成Mylabel,养成这个习惯!