一段时间以来,我一直在尝试通过从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/

10-10 20:31