0

controllerA (タブ バーの 2 番目の項目) から controllerB (タブ バーの最初の項目) に文字列を渡し、その文字列を配列に追加して表示したいと思います。reloadData を呼び出しましたが、テーブル ビューはまだ空です。controllerB に文字列を表示するにはどうすればよいですか? (この 2 つのコントローラーは 2 つの異なるナビゲーション コントローラーに接続されており、seque を使用したくありません)。

ここにいくつかのコードがあります: //ControllerA

ControllerB *bController = [[ControllerB alloc]init];
bController.myString = self.cellLabel.text;
[tableController addButtonIsPressed];

//ControllerB.h
@property (copy, readwrite) NSString *myString;

//ControllerB.m

-(void)addButtonIsPressed {

[myData addObject:@"myString"]; //in NSLog I can see correct value of myString
[self.tableView reloadData];

}

今、コンソールに myData を出力すると null であることに気付きました。このメソッドのviewDidLoadの値でmyDataを初期化しても、その(null)..

4

2 に答える 2

1

さらに情報が必要ですが、問題は次の場所にある可能性があります。

ControllerB *bController = [[ControllerB alloc]init];

別のコントローラーを宣言すると、表示されているのと同じコントローラーではない可能性があります。何も表示されない原因: [self displayModal ....] 正しい "mystring" を使用して B コントローラーを作成するだけですが、別の B コントローラーを表示しています。

于 2012-06-29T15:35:53.093 に答える
0

あなたの回答に基づいて、ここにいくつかの考えがあります。それが役に立てば幸い:

  1. 2 つ以上のビュー コントローラーがある場合、慣習として、親コントローラーはプロパティの設定を介して子コントローラーと直接対話します。ただし、子が親と話したい場合は、委任を使用して行います。

これは、あなたの場合のように、2 つの並列コントローラーがある場合と同じです。お互いのプロパティを直接設定しないでください。委任を使用する必要があります。

  1. また、ControllerBインスタンス化したインスタンスは、画面に表示されているものと同じではありません。新品です!これは の新しいインスタンスでControllerBあり、画面上にあるものとはまったく関係ありません。

検索すると、委任の方法の例がいくつか見つかります。

于 2012-06-29T16:00:31.840 に答える