我在示例项目AppPrefs中使用了这一行:
UITableView *tableView = ((UITableViewController *)self.navController.visibleViewController).tableView;
它当然完美无缺,
所以我试过了:
UISearchBar *searchBar = (UIViewController *)mySearchBar;
但是我发出mySearchBar
未声明的警告,即使它是一个属性并在MainViewController(UIViewController类)中初始化。
我需要从AppDelegate访问MainViewController中的各种对象,因此应用程序可以在设置更改时自行刷新。
答案 0 :(得分:1)
哎呀,你的代码在尽可能多的地方是错误的。让我解释一下:
一。您将mySearchBar
转换为UIViewController *
,然后将其分配给不同的指针类型(类型UISearchBar *
)。
两个。如果你是从app代理写的,那么编译器应该怎么知道哪个类' (甚至更进一步,你使用的是哪个对象)?可能有多个对象/类具有相同名称的属性。
我觉得你混淆了类型转换和访问属性(因此我强烈建议在直接进入iOS开发之前正确学习普通C,因为这是一个基本问题,如果你不这样做,你可能会产生低质量的代码&#但是还没理解这一点。您应该维护视图控制器的实例(使其成为全局变量,单例,甚至更好,应用程序委托对象的属性)并从那里访问它。例如:
UISearchBar *bar = [[[[UIApplication sharedApplication] delegate] mainViewController] searchBar];
答案 1 :(得分:0)
如果“mySearchBar”是在MainViewController中声明的属性,则self.navController.visibleController是MainViewController的实例。只需访问它:
UISearchBar* searchBar= self.navController.visibleController.mySearchBar
现在您正在尝试分配AppDelegate中甚至不存在的内容,因为mySearchBar尚未在您的AppDelegate中声明。