一段时间以来,我一直在尝试通过从AppDelegate.m到MainViewController.m的方法调用来更新UILabel。我真的不明白为什么这不起作用。该方法被称为“正常”,除了更改/更新标签文本的最后一点之外,所有方法均有效。
工作流程
在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!!";
都不会更新标签,但是将调用该方法并将其值命名为LOG: Testing to print value: test
。此外,如果我从MainViewController中调用此方法:[self updateLabelMethod]
一切正常。我已经尝试了基本上所有的解决方案,但问题是,我在这里所做的只是直接解决了几个Stackoverflow问题,因此我不知道如何继续。我正在使用情节提要。
还有其他想法吗?
最佳答案
感谢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];
}
关于ios - objective-c :为什么我不能从另一个类(AppDelegate> MainViewController)更新标签?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14407009/