2011-06-30 54 views
1

點擊tabbar時,我需要重新加載視圖控制器中的數據。目標C:如何在選擇標籤頁時重新加載視圖控制器的表格視圖

我使用的UITabBarControllerDelegate方法如下:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if (tabBarController.selectedIndex == 3) 
    { 
     [(SomeViewController *)viewController getData]; 
    } 
} 

其中 '的getData' 處於SomeViewController類的一個實例方法。然而,當我運行我的應用程序,我得到以下錯誤

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' 

任何人都可以告訴我我怎麼能克服這個問題?我只需要觸發「的getData」的方法tabbarcontroller.selected索引時== 3

回答

2

在我看來,從你的錯誤信息,您使用UINavigationController在你的標籤控制器中;在這種情況下,您不能直接發送getData消息;您應該首先找出UINavigationController下的哪個視圖控制器應接收該消息。 (這實際上不涉及到標籤欄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]; 

和選項卡欄控制器發送爲控制器以在反應的通知:在this post

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

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

查找。

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]; 
} 
相關問題