Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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
Iphone 警告:';UIViewController';可能不响应';xxx和x27;_Iphone_Methods_Declaration_Uitabbar - Fatal编程技术网

Iphone 警告:';UIViewController';可能不响应';xxx和x27;

Iphone 警告:';UIViewController';可能不响应';xxx和x27;,iphone,methods,declaration,uitabbar,Iphone,Methods,Declaration,Uitabbar,我对iPhone开发还比较陌生,但我知道这个警告通常是由于没有在我的类头文件中声明一个方法。这有点不同——至少我认为是这样 我在我的应用程序根视图控制器中创建了一个自定义选项卡栏,它在委托方法内动态加载到其他视图控制器中-基本上如下所示: - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { UIViewController *viewController = [viewControllers ob

我对iPhone开发还比较陌生,但我知道这个警告通常是由于没有在我的类头文件中声明一个方法。这有点不同——至少我认为是这样

我在我的应用程序根视图控制器中创建了一个自定义选项卡栏,它在委托方法内动态加载到其他视图控制器中-基本上如下所示:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

    UIViewController *viewController = [viewControllers objectAtIndex:item.tag];
    [self.selectedViewController.view removeFromSuperview];
    [self.view insertSubview:viewController.view atIndex:0];
    self.selectedViewController = viewController;

}
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

    if (self.currentController == 1) {
        [self.selectedViewController saveSettings];
    }

    UIViewController *viewController = [viewControllers objectAtIndex:item.tag];
    [self.selectedViewController.view removeFromSuperview];
    [self.view insertSubview:viewController.view atIndex:0];
    self.selectedViewController = viewController;

}
该代码工作正常,并加载到所需的视图中。当视图更改时,将运行一个检查,以查看设置视图是否即将卸载,如果是,它将调用save settings方法,如下所示:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

    UIViewController *viewController = [viewControllers objectAtIndex:item.tag];
    [self.selectedViewController.view removeFromSuperview];
    [self.view insertSubview:viewController.view atIndex:0];
    self.selectedViewController = viewController;

}
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

    if (self.currentController == 1) {
        [self.selectedViewController saveSettings];
    }

    UIViewController *viewController = [viewControllers objectAtIndex:item.tag];
    [self.selectedViewController.view removeFromSuperview];
    [self.view insertSubview:viewController.view atIndex:0];
    self.selectedViewController = viewController;

}
同样,代码运行正常,并且调用了SettingsViewController的实例方法,但由于该方法的声明位于SettingsViewController的标头中,而不是RootViewController中,因此出现警告


如果我也在RootViewController中声明它,我会得到“没有匹配的方法声明”警告。我认为重新定义我的函数可以修复警告,但肯定不是修复警告的“正确”方法。

如果我正确理解您的问题,这应该可以:

if (self.currentController == 1) {
    [(SettingsViewController *)self.selectedViewController saveSettings];
}

我确信我已经试过了,但我一定是打错了,因为这样做效果很好。非常感谢。