0

と呼ばれるカスタム ビュー コントローラーとTimerViewController、このサブクラスと呼ばれるサブクラスがFirstViewControllerありFourthViewControllerます。

FirstViewControllerinFirstViewController.h という名前のインスタンスを宣言しましたcontroller

viewDidLoadメソッドには、次FourthViewController.mものがあります。

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];

ストーリーボードでは、ビュー コントローラー ID を としてmainController宣言し、カスタム クラス を宣言しましたFourthViewController。次に、私は持っていFourthViewControllerます.m

controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];
NSLog(@"%@", controller.mainLab.text);

ただし、これは を出力します(null)

なぜこれが起こるのですか?

4

4 に答える 4

2

mainLabでなければなりませんnil。したがって、コンセントが XIB に接続されていない可能性があります。


余談stringWithFormat:ですが、フォーマットではない文字列で使うのはもったいないです。

于 2013-08-09T18:46:10.550 に答える
1

mainLabまだ作成されていないようです。nil オブジェクトでメソッドを呼び出すと、メソッドは自動的に nil を返します。このコード行を実行する前に、実際にラベルを作成していることを確認してください。

于 2013-08-09T21:14:30.360 に答える
0

viewDidLoad メソッドがまだ実行されていないため、インスタンス化した直後に別のコントローラーのラベル (またはその他の UI 要素) にアクセスすることはできません。ラベルのテキストを別のコントローラに設定する場合は、そのコントローラにテキストを渡し、viewDidLoad メソッドでラベルのテキストを設定する必要があります。したがって、これの代わりに:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLab.text = [NSMutableString stringWithFormat:@"This is a string"];

これを行う必要があります:

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainController"];
controller.mainLabText = @"This is a string";

mainLabText は、FourthViewController で作成する文字列プロパティです。次に、FourthViewController の viewDidLoad にラベルを入力します。

self.mainLab.text = self.mainLabText;
于 2013-08-11T06:16:14.753 に答える