我仍然相对较新的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;
}
再次代码函数很好并且调用了SettingsViewController的实例方法,但是因为方法的声明在SettingsViewController的头部而不是RootViewController因此警告。
如果我在RootViewController中声明它,我得到'无匹配的方法声明'警告。我认为重新声明我的功能会修复警告 - 但肯定不是解决这个问题的“正确”方法。
答案 0 :(得分:2)
如果我理解你的问题,这应该有效:
if (self.currentController == 1) {
[(SettingsViewController *)self.selectedViewController saveSettings];
}