0

UINavigationController (私は xcode 4.3 を使用しています) を介して UITableView に int 変数を渡そうとしています。そのため、2 つのクラス ("UITableViewController" である PartsTableViewController と "UINavigationController" である PartsNavController) を作成しました。クラスを PartsTableViewController に変換し、そのテーブルをタイトル バーを含むナビゲーション コントローラーで開くため、現在のクラスに次のコードを記述しました。

PartsNavController *partsNav = [self.storyboard instantiateViewControllerWithIdentifier:@"partsNav"];  
partsNav.groupId = myGroupp.bg_id;
[self presentModalViewController:partsNav animated:YES];

そして、partsNavController クラスで、viewDidLoad に次のように記述しました。

PartsTableViewController *parts = [self.storyboard instantiateViewControllerWithIdentifier:@"Parts"];
parts.groupId = groupId;
[parts.tableView reloadData];

そして、PartsTableViewController では、viewDidLoad に次のように記述しました。

NSLog(@"This is group: %d", groupId);

しかし、実行すると、出力が2回生成されます。

This is group:1
This is group:0

1回目は送信した値で、2回目は 0 で、送信した値だけが必要です 0 ではなく、どうすればこれを防ぎ、送信した値だけを取得できますか????

ここに画像の説明を入力

セグエを使わずに(MaktabatyTableViewController)から(PartsTableViewController)に渡したい

4

2 に答える 2

5

必要なことを行うためのより良い方法は、既存の UINavigationController に 2 番目の TableViewController をプッシュすることです。これを行う最も簡単な方法は、その NavContr を StoryBoard で作成し、TableViews よりもセグエを使用して主要なビュー コントローラーにセルを接続することです。そして、以下の方法を使用するよりも:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *destViewController = segue.destinationViewController;
    destViewController.integerValue = value;
}

ここに画像の説明を入力

于 2012-05-20T11:41:55.313 に答える
0

セグエを使わずに(MaktabatyTableViewController)から(PartsTableViewController)に渡したい

選択できる (少なくとも) 2 つの戦略があります。

  1. 直接通信: 2 つのオブジェクト間の通信方法についてよく質問されますが、ほとんどの場合、一方のオブジェクトが他方のオブジェクトへの参照を持っていることになります (逆の場合もあります)。オブジェクトにメッセージを送信するには、そのオブジェクトへのポインターが必要です。ポインターを持っている場合、通信方法について謎はありません。これらの用語で考えると、問題を少し違った方法で考えるのに役立ちます。「そのオブジェクトにメッセージを送信するにはどうすればよいか」という即時の代わりに。代わりに、2 つのオブジェクト間の関係に注目することができます。それぞれどのように作成されたのですか?オブジェクトの 1 つは他のオブジェクトの親ですか? ポインターを提供できる共通の親オブジェクトはありますか? 関係があるとすれば、どのようにオブジェクトを関連付けるべきですか?

  2. 間接通信: 2 つのオブジェクトが直接通信するのではなく、中間オブジェクトを介して通信をルーティングする方が適切な場合があります。たとえば、MaktabatyTableViewControllerがデリゲートにメッセージを送信すると、デリゲートは情報を に渡すことができPartsTableViewControllerます。より一般的な解決策は、通知を使用することです。リッスンMaktabatyTableViewControllerする通知を投稿できます。PartsTableViewControllerこの場合の中間オブジェクトは通知センターです。いずれにせよ、間接通信で得られる利点は、どちらのオブジェクトも相手のことを知る必要がないことです。これにより、2 つのクラス間の結合が減り、柔軟性と再利用性が向上します。

あなたの質問でわかることから、通知を使用することをお勧めします。

于 2012-05-20T12:47:27.703 に答える