2011-06-30 8 views
1

タブバーをクリックしたときに、ビューコントローラでデータをリロードする必要があります。目的C:タブが選択されているときにView Controllerのテーブルビューを再ロードする方法

私は以下のようにUITabBarControllerDelegateメソッドを使用しています:

'のgetData' はSomeViewControllerクラスのインスタンスメソッドである
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if (tabBarController.selectedIndex == 3) 
    { 
     [(SomeViewController *)viewController getData]; 
    } 
} 

。しかし、私は私のアプリを実行すると、私は次のエラーが表示されます

2011-07-01 02:12:11.193 onethingaday[19169:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController getData]: unrecognized selector sent to instance 0x600d500' 

私はこの問題を克服する方法を教えてもらえますか?インデックスtabbarcontroller.selectedとき、私はちょうどあなたがUINavigationControllerを使用することを、== 3

答えて

2

への解決策を参照してください「のgetData」メソッドをトリガーする必要がありますあなたのタブコントローラーで。この場合、直接getDataメッセージを送信することはできません。最初にUINavigationControllerの下にあるどのView Controllerがそのメッセージを受け取るべきかを調べる必要があります。

(これは実際にはタブバーselectedIndexとは関係ありません)私はあなたUINavigationControllerが編成されているのか分からないが、あなたは何ができる:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (tabBarController.selectedIndex == 3) { 

    //-- option 1: getData goes to the first view controller in the UINavigationController: 
     [[(SomeViewController*)[(UINavigationController*)viewController topViewController] getData]; 

    //-- option 2: getData goes to the last view controller in the UINavigationController (the visible one): 
     [[(SomeViewController*)[(UINavigationController*)viewController visibleViewController] getData]; 

    } 
} 

あなたUINavigationControllerの組織の詳細を与える場合私は正しいオプションを特定することをさらに助けることができます。

とにかく、キャストからわかるように、あなたのデザインでは完全にはうまくいかないものがあります。私は強くそれの通知を使用することをお勧めします。つまり、あなたのSomeViewController特定のタイプの通知のための登録自体:

[[NSNotificationCenter defaultCenter] addObserver:self 
          selector:@selector(someSelector:) 
          name:ShouldGetDataNotification 
          object:nil]; 

とタブバーコントローラは時に反応するあなたのコントローラの通知を送信します。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (tabBarController.selectedIndex == 3) { 

     [[NSNotificationCenter defaultCenter] postNotificationName:ShouldGetDataNotification object:nil]; 
    } 
    .... 
} 

this postを見てください。

1
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if (tabBarController.selectedIndex == 3) 
    { 
     [[[(UINavigationController *)viewController viewControllers] objectAtIndex:2] getData];//2 for 3rd tabbar since 0,1,2 



    } 
} 
1

UITableViewControllerサブクラスに-viewWillAppearメソッドを実装できます。 UITabBarControllerがビューに切り替わると自動的に呼び出されるはずです。次のようになります。

- (void)viewWillAppear { 
    [super viewWillAppear]; 
    [self getData]; 
} 
関連する問題