Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:如何重新加载视图控制器&x27;选择“选项卡”时的表视图_Objective C_Uitabbarcontroller - Fatal编程技术网

Objective c 目标C:如何重新加载视图控制器&x27;选择“选项卡”时的表视图

Objective c 目标C:如何重新加载视图控制器&x27;选择“选项卡”时的表视图,objective-c,uitabbarcontroller,Objective C,Uitabbarcontroller,单击视图控制器的选项卡栏时,我需要在视图控制器中重新加载数据 我使用UITABBARCONTROLLEDELEGATE方法,如下所示: - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { if (tabBarController.selectedIndex == 3) {

单击视图控制器的选项卡栏时,我需要在视图控制器中重新加载数据

我使用UITABBARCONTROLLEDELEGATE方法,如下所示:

- (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'

有人能告诉我如何克服这个问题吗?当tabbarcontroller.selected index==3时,我只需要触发“getData”方法。请查看解决方案请查看解决方案从收到的错误消息中,我觉得您在选项卡控制器中使用了
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];
选项卡栏控制器会发送通知,让您的控制器在以下情况下做出反应:

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

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

看看。

从您收到的错误消息中,我觉得您在选项卡控制器中使用了
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];
选项卡栏控制器会发送通知,让您的控制器在以下情况下做出反应:

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

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

查看。

您可以在
UITableViewController
子类中实现
-viewwillbeen
方法。当
UITabBarController
切换到该视图时,应自动调用。它应该是这样的:

- (void)viewWillAppear {
    [super viewWillAppear];
    [self getData];
}

您可以在
UITableViewController
子类中实现
-viewwillbeen
方法。当
UITabBarController
切换到该视图时,应自动调用。它应该是这样的:

- (void)viewWillAppear {
    [super viewWillAppear];
    [self getData];
}