4

Noobie iOS 开发人员,这里有一个采用的 iOS 应用程序。

我有一个 iOS 应用程序的设置部分,当用户单击完成时,我想要模态视图控制器(它目前正在执行)并且我想在 presentingViewController 中调用一个名为 updateMainUI 的函数。

这是我正在调用的方法:

- (void)done:(id)sender
{
  [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil]; // works 
  [[self presentingViewController updateMainUI]; //doesn't work

但我收到以下错误:

No visible @interface for 'UIViewController' declares the selector 'updateMainUI'

但我已经在呈现控制器中声明了这一点

@interface LocationsViewController : UITableViewController <CLLocationManagerDelegate, UISearchBarDelegate, UISearchDisplayDelegate>
-(void)updateMainUI;

但奇怪的是,当呈现控制器是 UITableViewController 时,错误应该与 UIViewController 有关。

关于如何让 updateMainUI 工作的任何想法?我做错了什么?

谢谢

编辑 #1 这就是我创建它的方式 - 知道如何获得对 *nearbyViewController 的引用吗?

UIViewController *nearbyViewController = [[LocationsViewController alloc] initWithNearbyLocations];
UINavigationController *nearbyNavigationController = [[UINavigationController alloc] initWithRootViewController:nearbyViewController];
...
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nearbyNavigationController, browseNavigationController, eventsNavigationController, nil];
4

3 回答 3

4

解雇后self,你应该期望self.presentingViewController成为nil。尝试updateMainUI在解雇前打电话。

于 2012-05-12T02:47:13.160 回答
1

克鲁德,我现在看到了真正的答案。是选角问题。试试这个:

[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
[(LocationsViewController *)[self presentingViewController] updateMainUI];

您需要非常确定-presentingViewController返回 LocationsViewController 类型的对象,否则您将遇到更大的问题。

于 2012-05-12T04:39:15.163 回答
0

[[self presentingViewController updateMainUI]坏了,不会编译。假设你的意思是[[self presentingViewController] updateMainUI],那么还有其他方法可以做到这一点。

LocationsViewController *presenting = (LocationsViewController *)[self presentingViewController];
[presenting dismissViewControllerAnimated:YES completion:^{
    [presenting updateMainUI];
}];

使用变量呈现是重要的一步。

于 2012-05-12T02:55:53.120 回答