如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?
Posted
技术标签:
【中文标题】如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?【英文标题】:how to update a UILabel's Text from AppDelegate.m file in Xcode? 【发布时间】:2014-08-30 14:51:50 【问题描述】:我是 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]);
【问题讨论】:
【参考方案1】:您正在AppDelegate.m
的applicationDidEnterBackground:
方法中创建一个新的ViewController 实例,而不是访问现有的实例。作为快速修复,您应该找到指向现有实例的 self.window.rootViewController
点。因此,将您的代码更改为:
NSLog(@"Label text is %@",self.window.rootViewController.Mylabel.text);
注意使用“点”符号来访问属性(这更容易)。仅供参考,传统上属性以小写字母开头;您可能想将 Mylabel 更改为 myLabel,以养成习惯!
【讨论】:
谢谢,这就是我想要的。谢谢你。但 TheGamingArt 有更好的答案【参考方案2】:ViewController * viewController = (ViewController *)self.window.rootViewController;
NSLog(@"This is my text: %@", viewController.Mylabel.text);
由于您是 Objective-C 的新手,我将指出您不应该每次都将您的属性值大写(AKA Mylabel)。始终对属性和方法使用驼峰式大小写。方法使用 [ ] 调用,属性使用 。符号访问和设置。您也不需要合成 Mylabel,因为这是自动为您完成的。我建议查看raywenderlich.com 提供的 ios by Apprentice 书籍以了解最新情况。
【讨论】:
...好吧,通常我不会在意...但是为什么有人实际上对此投了反对票。如果有人不同意我上面所说的任何内容或我的回答,我希望得到一个很好的解释。特别是因为我上面所说的一切都是正确的,而我提到的方法是由 Apple 自己定义的。如果你对此投了反对票,请解释原因(不要误导新接触 Objective-C 的人) 没问题,祝我们在作为 Objective C(以及即将推出的 Swift)所熟知和喜爱的旅程中好运。以上是关于如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?的主要内容,如果未能解决你的问题,请参考以下文章
从 AppDelegate 访问 View Controller 的属性
AppDelegate Touch3D Xcode - TabBar
Swift:从 AppDelegate 中的 UNTextInputNotificationAction 获取内容
Xcode 5 - iOS - 如何在没有 Storyboard 或 XIB 的情况下在 Xcode 中创建视图控制器以及如何将其配置为 AppDelegate 作为根视图
AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m