1

一段时间以来,我一直在尝试通过从AppDelegate.mMainViewController.m的方法调用来更新 UILabel。我真的不明白为什么这不起作用。该方法被调用一切正常,除了更改/更新标签文本的最后一点。

工作流程

AppDelegateapplicationDidBecomeActive中调用MainViewController中处理数据和更新标签的方法。updateLabelMethod

代码

主视图控制器.h

UILabel *daysResultOutlet;
@interface MainViewController : UIViewController <FlipsideViewControllerDelegate>
     @property (strong, nonatomic) IBOutlet UILabel *daysResultOutlet;
@end

@interface MainViewController ()
    - (void) updateLabelMethod;
@end 

主视图控制器.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!

}

结果与尝试

标签不会通过跨类方法调用或通过更新,但是updateLabelMethodmvsAsObj.daysResultOutlet.text = @"update!!";该方法被调用并它的值:LOG: Testing to print value: test。此外,如果我从 MainViewController 中调用此方法:[self updateLabelMethod]一切正常。

我已经尝试了基本上所有的解决方案,但问题是,我在这里做的是直接解决几个 Stackoverflow 问题,所以我不知道如何继续。我正在使用故事板。

任何进一步的想法

4

3 回答 3

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];
}
于 2013-01-19T00:42:35.337 回答
3

你为什么期待

MainViewController *mvsAsObj = [[MainViewController alloc] init];

返回已经存在的视图控制器的相同实例?alloc创建一个新实例。修改它显然不会对另一个实例产生任何影响。

于 2013-01-18T20:24:03.160 回答
0

您是否将代码中的 UILabel 连接到 Storyboard/Nib 文件中的实际标签?

只是问,因为我有时也会忘记这一点......

于 2013-01-18T20:27:07.120 回答