单击标签栏时,我需要在视图控制器中重新加载数据。
我正在使用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'
有谁能告诉我如何克服这个问题?我只需要在tabbarcontroller.selected index == 3
时触发'getData'方法答案 0 :(得分: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];
并且标签栏控制器发送通知给您的控制器做出反应:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 3) {
[[NSNotificationCenter defaultCenter] postNotificationName:ShouldGetDataNotification object:nil];
}
....
}
请看this post。
答案 1 :(得分:1)
答案 2 :(得分: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
}
}
答案 3 :(得分:1)
您可以在-viewWillAppear
子类中实现UITableViewController
方法。当UITabBarController
切换到视图时,应该自动调用它。看起来应该是这样的:
- (void)viewWillAppear {
[super viewWillAppear];
[self getData];
}