1

これを使ってラベルを設定すると

self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];

メソッドではviewDidLoad、ビューがロードされたときに機能しますが、通知を受け取ったときにラベルを設定したいです。

- (void)receiveNotification:(NSNotification *) notification
{
  if ([[notification name] isEqualToString:@"versionNotification"]){
    NSLog (@"Successfully received the notification!");
    self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
  }
}

文字列は出力されますが、ビューを再度リロードしてメソッドが呼び出され"Successfully received the notification!"ない限り、ラベルは文字列で更新/設定されません。viewDidLoad

編集

通知とは何の関係もないことがわかりましたself.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];。別の関数を入れても設定されません... viewDidLoad メソッドに入れたときにのみ設定されます

4

4 に答える 4

3

nilラベルがそうではないことと、メイン スレッドで UIKit メソッドを呼び出していることを確認してください。これを試すことができます:

dispatch_async(dispatch_get_main_queue(), ^{
    self.versionLbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
});
于 2013-04-11T12:27:33.937 に答える
0

UILabel で IBOutlet を確認してください。.xib ファイルのラベル付きのプロパティで宣言された IBOutlet UILabel を接続する必要があります。

于 2013-04-11T13:05:37.073 に答える
0

まず、格納されているオブジェクト[[NSUserDefaults standardUserDefaults] objectForKey:@"version"];が実際にオブジェクトであることを確認してNSStringください。

そうでない場合は、いくつかの選択肢があります。

self.versionLbl.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"version"];

また

id versionObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
self.versionLbl.text = [NSString stringWithFormat:@"%@", versionObject];

また

id versionObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"version"];
self.versionLbl.text = [versionObject stringValue];
于 2013-04-11T12:13:33.193 に答える
0

ビューが既にロードされた後にロードする場合は、[myLabel setNeedsDisplay]; を試してください。

于 2013-04-11T13:07:54.477 に答える