1

しばらくの間、 AppDelegate.mからMainViewController.mへのメソッド呼び出しを介してUILabel を更新しようとしています。なぜこれが機能しないのか、私には本当にわかりません。メソッドは問題なく呼び出されラベル text の変更/更新の最後のビットを除いすべてが機能します。

ワークフロー

AppDelegateで、データを処理してラベルを更新するapplicationDidBecomeActiveMainViewControllerupdateLabelMethodメソッドを呼び出します。

コード

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!

}

結果と試み

ラベルは、メソッド呼び出しのクロスクラスまたは を介し​​て更新されませんが、メソッドが呼び出されて値を取得します: 。さらに、MainViewController 内からこのメソッドを呼び出すと、すべて正常に動作します。updateLabelMethodmvsAsObj.daysResultOutlet.text = @"update!!";LOG: Testing to print value: test[self updateLabelMethod]

私は基本的にすべての解決策を試しましたが、ここで私がやっていることはいくつかのStackoverflowの質問からまっすぐなので、どうすればよいかわかりません。ストーリーボードを使用しています。

さらにアイデアはありますか?

4

3 に答える 3

5

AppDelegateからメソッドを呼び出す代わりに、コントローラにリッスンさせる可能性を指摘してくれたRyan Poolosに感謝します。UIApplicationDidBecomeActiveNotificationこれは私がそれをやった方法です:

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];

すでに存在するViewControllerの同じインスタンスを返すには?alloc新しいインスタンスを作成します。変更しても、他のインスタンスには明らかに影響しません。

于 2013-01-18T20:24:03.160 に答える
0

コードの UILabel を Storyboard/Nib ファイルの実際のラベルに接続しましたか?

私も時々それを忘れがちなので聞いているだけです...

于 2013-01-18T20:27:07.120 に答える