我希望从AppDelegate访问MainViewController中的对象

时间:2012-07-30 20:32:23

标签: ios uitableview delegates uisearchbar

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

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

它当然完美无缺,

所以我试过了:

UISearchBar *searchBar = (UIViewController *)mySearchBar;

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

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

2 个答案:

答案 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中声明。