没有可见接口-TabBarController

时间:2013-04-27 17:09:28

标签: interface-builder uitabbarcontroller

我有一个有趣的问题,我无法提出任何解决方案。

我的问题是我在主视图Controller上创建了tabBarController,每当用户点击其中一个时,它就会调用相应的viewcontroller并使用[startFetchingFromServer]方法从服务器获取数据。但是,我收到错误“No Visible @interface for”UIViewcontroller声明了startFetching方法“。

h.file中的

@property (nonatomic, retain) IBOutlet UITabBarController *opponentInfoTabBarController;
m.file中的

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

1 个答案:

答案 0 :(得分:1)

1)确保在selectedViewControllers的头文件中声明了startFetchingFromServer(objOpponentInfoSettingsViewController.h和objOpponentInfoBuddiesViewController.h)

2)将您的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];
   }