2013-04-27 40 views
0

我有一個有趣的問題,我無法提出任何解決方案。無可見接口-TabBarController

我的問題是我在我的主視圖控制器上創建了tabBarController,每當用戶點擊一個或另一個時,它會調用相應的viewcontroller並使用[startFetchingFromServer]方法從服務器獲取數據。不過,我得到一個錯誤「的不可見的@interface 「的UIViewController聲明startFetching方法」。

在h.file

@property (nonatomic, retain) IBOutlet UITabBarController *opponentInfoTabBarController; 

在m.file

if((opponentInfoTabBarController.selectedViewController == objOpponentInfoSettingsViewController) || (opponentInfoTabBarController.selectedViewController == objOpponentInfoBuddiesViewController)) 
    { 
     [opponentInfoTabBarController.selectedViewController startFetchingFromServer]; 
    } 

回答

1

1 )確保startFetchingFromServer在selectedViewController的頭文件中聲明(objOpponentInfoSettingsViewController.h和objOpponentInfoBuddiesViewController.h)

2)cast你的SelectedViewController到適當的類。它是UIViewController,所以你的編譯器正在尋找UIViewController.h中的startFetchingFromServer方法聲明,而你想讓它看看你的自定義類。

if(opponentInfoTabBarController.selectedViewController == objOpponentInfoSettingsViewController) 
    { 
     (objOpponentInfoSettingsViewController *)[opponentInfoTabBarController.selectedViewController startFetchingFromServer]; 
    } 
else if(opponentInfoTabBarController.selectedViewController == objOpponentInfoBuddiesViewController) 
    { 
     (objOpponentInfoBuddiesViewController *)[opponentInfoTabBarController.selectedViewController startFetchingFromServer]; 
    } 

希望這有助於!

編輯: 更好的是檢查是否selectedViewController是一類特殊的:

if(opponentInfoTabBarController.selectedViewController isKindOfClass: [OpponentInfoSettingsViewController class]) 
    { 
     (OpponentInfoSettingsViewController *)[opponentInfoTabBarController.selectedViewController startFetchingFromServer]; 
    } 
else if(opponentInfoTabBarController.selectedViewController isKindOfClass: [OpponentInfoBuddiesViewController class]) 
    { 
     (OpponentInfoBuddiesViewController *)[opponentInfoTabBarController.selectedViewController startFetchingFromServer]; 
    } 

這樣,你沒有保持全局引用您的情況下,只是調用「startFetchingFromServer」的方法。

通過在調用它之前添加對「startFetchingFromServer」選擇器的檢查,可以使此代碼塊更加健壯。

類似:

if ([theViewController respondsToSelector:@selector(startFetchingFromServer)]){ 
     [theViewController startFetchingFromServer]; 
    } 
+0

如果(opponentInfoTabBarController.selectedViewController == objOpponentInfoSettingsViewController) { [objOpponentInfoSettingsViewController startFetchingFromServer]; } else if(opponentInfoTabBarController.selectedViewController == objOpponentInfoBuddiesViewController) {objOpponentInfoBuddiesViewController startFetchingFromServer]; } – casillas 2013-04-27 19:57:07

+0

你好卡爾文,我已經更新了我上面的代碼。你認爲這是解決問題的正確方法嗎?順便說一句,非常感謝。 – casillas 2013-04-27 19:57:48

+0

如果你的代碼指的是settings/buddies視圖控制器的同一個實例,那麼它很好。我仍然希望檢查選定的視圖控制器是否屬於特定的類,然後在selectedViewController上調用該類的方法。 – 2013-04-28 02:19:21

相關問題