目标C:为什么我不能从另一个类(AppDelegate> MainViewController)更新标签?

时间:2013-01-18 20:21:16

标签: ios objective-c class uilabel

我一直试图通过 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!

}

结果&amp;尝试

标签不会通过跨类方法调用updateLabelMethod或通过mvsAsObj.daysResultOutlet.text = @"update!!";来更新,但是,方法会被调用并且它会引用值:{{ 1}}。此外,如果我在MainViewController中调用此方法:LOG: Testing to print value: test一切正常。

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

还有其他想法

3 个答案:

答案 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文件中的实际标签?

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