1

aの2つの異なるタブに配置されNSTabView、それぞれが3番目のコントローラー(Controller2)から異なるコントローラー(Controller1とController3)によって制御される2つのテーブルのコンテンツを更新する際に問題が発生します。私は3つの異なるアプローチを試しました:

アプローチ#1:Controller1(テーブルのコントローラーinvitesTableView)でメソッドrefreshTableを作成しました:

- (void)refreshTable {
  invites = //fill my mutable array
  NSLog(@"%@",invites); 
  [self.invitesTableView reloadData];
  NSLog(@"invite's table view updated");
}

後でController2から呼び出します。

Controller1 *controller1 = [[Controller1 alloc] init];
[controller1  refreshTable];

NSLog配列招待の内容を正しく出力しますが、テーブルは更新されません。アプリケーションの起動時に、Controller1でまったく同じメソッドを呼び出し、配列の招待の内容がテーブルに正しくロードされていると言う必要があります。

アプローチ#2:Controller2にいるとき、私は次のことを行います。

Controller1 *controller1 = [[Controller1 alloc] init];
controller1.invites = //fill my mutable array
NSLog(@"%@",controller1.invites);
[controller1.invitesTableView reloadData];

NSLogただし、が正しい内容を示していても、テーブルの内容は更新されません。

アプローチ#3:Controller1がの内容を制御するのでNSTabViewItem、私はController1に次の方法を統合しました。

- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)inviteTab

refreshTableController1によって制御されるタブを開くとすぐにメソッドを呼び出すため、問題なく動作します。問題は、異なるタブに異なるテーブルがありますが、のデリゲートとして設定できるコントローラーは1つだけであるNSTabViewため、別のテーブルでController3によって制御されるテーブルを更新できないことです。Controller1とController3をマージする以外に、#3にアプローチする簡単な解決策はないと思いますが、最初の2つのアプローチに関して何かが欠けていると思います。

私が自分自身をはっきりと説明したことを願っています。誰か助けてもらえますか?前もって感謝します!

4

1 に答える 1

3

通知/オブザーバーを使用してテーブルビューを再読み込みできます。

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(reloadTable:)
                                             name:@"reloadNotification"
                                           object:nil];

- (void)reloadTable:(NSNotification *)notif {
    [self.tableName reloadData];
}

最初のタブでこれを使用します:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadNotification" 
                                                    object:nil];
于 2013-01-14T12:11:48.780 に答える