我一直试图通过 AppDelegate.m 到 MainViewController.m 的方法调用更新UILabel 一段时间了。我真的不明白为什么这不起作用。 方法名为allright ,一切正常 , 更改/更新标签文本的最后一位。< / p>
在 AppDelegate 的applicationDidBecomeActive
中调用 MainViewController 中的方法updateLabelMethod
,该方法处理数据并更新标签。
MainViewController.h
UILabel *daysResultOutlet;
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
@property (strong, nonatomic) IBOutlet UILabel *daysResultOutlet;
@end
@interface MainViewController ()
- (void) updateLabelMethod;
@end
MainViewController.m
@synthesize daysResultOutlet;
- (void) updateLabelMethod {
NSString *value = @"test";
NSLog(@"Testing to print value: %@",value);
[daysResultOutlet setText:value]; //insert in label
}
AppDelegate.m
#import "AppDelegate.h"
#import "MainViewController.h"
@interface MainViewController ()
@end
- (void)applicationDidBecomeActive:(UIApplication *)application
{
MainViewController *mvsAsObj = [[MainViewController alloc] init];
[mvsAsObj updateLabelMethod]; //running function, value correctly logged but lbl not updated
mvsAsObj.daysResultOutlet.text = @"update!!"; // not working!
}
标签不会通过跨类方法调用updateLabelMethod
或通过mvsAsObj.daysResultOutlet.text = @"update!!";
来更新,但是,方法会被调用并且它会引用值:{{ 1}}。此外,如果我在MainViewController中调用此方法:LOG: Testing to print value: test
一切正常。
我基本上已经尝试了所有解决方案,但事实是,我在这里做的是直接关闭几个Stackoverflow问题所以我不知道如何继续。我正在使用故事板。
还有其他想法?
答案 0 :(得分:5)
感谢 Ryan Poolos 指出让我的控制器听取UIApplicationDidBecomeActiveNotification
而不是从AppDelegate调用该方法的可能性。这就是我最终做到的方式:
在MainViewControll中, ViewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(becomeActive:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
- (void)becomeActive:(NSNotification *)notification {
NSLog(@"active");
}
清理向上通知
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
答案 1 :(得分:3)
为什么期待
MainViewController *mvsAsObj = [[MainViewController alloc] init];
返回已存在的视图控制器的同一实例? alloc
创建一个新实例。修改它显然对其他实例没有任何影响。
答案 2 :(得分:0)
您是否将代码中的UILabel连接到Storyboard / Nib文件中的实际标签?
只是问,因为我有时也会忘记...