问题出在标题中。我写了“topViewController”来表示用户当前正在查看的全屏视图。无论应用程序是使用0,1还是多个navigationControllers,我都在寻找从App Delegate执行此操作的通用方法。
我可以为当前应用解决此问题,但使用特殊情况代码。有时您希望在App Delegate中放置一个通用方法并让它触发回调。我可以使用respondsToSelector,但它会对单独命名的回调方法进行(对我而言)丑陋的查找。
对我来说这只是一个有趣的问题(当然正在运行的应用程序必须知道!)并且在您的军械库中使用通用解决方案会很好。
答案 0 :(得分:0)
您是否在App Delegate中引用了导航控制器,其中包含您要调用方法的顶视图控制器?如果是这样,UINavigationController有一个名为topViewController
的成员。您可以将其强制转换为自定义视图控制器类:
CustomViewController *customController = (CustomViewController *)[aNavController topViewController];
[customController myCustomMethod];
正如我所说,如果你在App Delegate中引用了导航控制器,这个方法就可以了。
如果没有,另一种方法可能是使用NSNotificationCenter。在“topViewController”中注册自定义通知名称,并从App Delegate发布该通知。如果您在每个视图控制器可见时注册通知,并在它消失时取消注册,则只有可见视图控制器才会收到通知:
在您的情况下注册,可能在viewDidAppear:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myCustomMethod:) name:@"MyCustomNotification" object:nil];
发布应用代表的通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyCustomNotification" object:myAccount];
不要忘记删除viewDidDisappear:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"MyCustomNotification" object:nil];