0

我使用了示例项目 AppPrefs 中的这一行:

UITableView *tableView = ((UITableViewController *)self.navController.visibleViewController).tableView;

它当然完美无缺,

所以我尝试了:

UISearchBar *searchBar = (UIViewController *)mySearchBar;

但我收到mySearchBar未声明的警告,即使它是一个属性并在 MainViewController(属于 UIViewController 类)中初始化。

我需要从 AppDelegate 访问 MainViewController 中的各种对象,因此应用程序可以在设置更改时自行刷新。

4

2 回答 2

1

哎呀,您的代码在尽可能多的地方都是错误的。让我解释一下:

一。您正在转换mySearchBarUIViewController *然后将其分配给不同的指针类型(类型UISearchBar *)。

二。如果您是从应用程序委托中编写的,编译器怎么会知道您使用的是哪个类(更进一步,哪个对象的)属性?可能有多个对象/类具有相同名称的属性。

我觉得你对类型转换和访问属性感到困惑(所以我强烈建议在直接深入 iOS 开发之前正确学习纯 C,因为这是一个非常基本的问题,如果你还不理解这一点,你可能会产生低质量的代码) . 你应该维护你的视图控制器的一个实例(或者让它成为一个全局变量,一个单例,或者甚至更好,一个应用程序委托对象的属性)并从那里访问它。例子:

UISearchBar *bar = [[[[UIApplication sharedApplication] delegate] mainViewController] searchBar];
于 2012-07-30T20:40:41.680 回答
0

如果“mySearchBar”它是在您的 MainViewController 中声明的属性,并且您的 self.navController.visibleController 是 MainViewController 的一个实例。只需像这样访问它:

UISearchBar* searchBar= self.navController.visibleController.mySearchBar

现在您正在尝试分配 AppDelegate 中甚至不存在的东西,因为 mySearchBar 尚未在 AppDelegate 中声明。

于 2012-07-30T20:41:01.923 回答