0

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

我的问题是我在我的主视图控制器上创建了 tabBarController 并且每当用户单击一个或另一个时,它都会调用相应的视图控制器并使用 [startFetchingFromServer] 方法从服务器获取数据。但是,我收到错误“UIViewcontroller 声明 startFetching 方法没有可见的@interface”。

在 h. 文件中

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

在 m. 文件中

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

1 回答 1

1

1) 确保 startFetchingFromServer 在您 selectedViewControllers 的头文件中声明(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];
   }
于 2013-04-27T18:06:25.237 回答