1

アプリケーションの開始時に ViewControllers が読み込まれることに問題があると思います。TabBarController によって制御される 2 つの ViewController があります。ViewAにはボタンがあり、ボタンがクリックされると、通知を使用してViewBのメソッドを呼び出し、ViewBのラベルを更新します。ただし、ViewB をクリックして少なくとも 1 回画面に表示されるまで、ラベルは変更されません。以前に ViewB をクリックしなくても、ボタンをクリックしたときにラベルを更新する方法があるかどうか疑問に思っていました。

4

1 に答える 1

0

たとえば、IBOutlet プロパティは、ビューが実際に読み込まれるまで nil に設定されます。したがって、ビューが実際にロードされる前に IBOutlet ラベルのテキストを設定しようとすると、メッセージが nil に送信されるだけです。

ViewControllerB を初期化して nib からビューをロードした後、loadView を呼び出してみることもできますが、Apple のドキュメントには、このメソッドを直接呼び出すことは想定されていないと書かれています。また、更新されたラベル プロパティを設定する ViewControllerB にプロパティを作成し、このプロパティを使用して、viewControllerB の viewWillAppear で IBOutlet を設定することもできます。

別のものをお勧めします。ViewControllerbからアクセス可能な場所にラベルを設定したいものをviewBに保存してから、ViewControllerBのviewWillAppearにラベルを設定します。たとえば、NSUserDefaults に保存できます。

NSString *viewBLabelText = @"ViewB Label Text";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:viewBLabelText forKey:@"ViewBLabelText"];
[defaults synchronize];

次に、ViewControllerB の viewWillAppear で:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.labelProperty.text = [defaults objectForKey:@"ViewBLabelText"];
于 2013-03-17T19:33:57.233 に答える