从随机类访问 UIViewController

Posted

技术标签:

【中文标题】从随机类访问 UIViewController【英文标题】:Access to UIViewController from a random class 【发布时间】:2014-11-05 19:58:55 【问题描述】:

我正在尝试找到如何从我的项目中的随机类访问UIViewcontroller 的解决方案。

在我上课之前:

MBViewController vc =  (MBViewController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];

效果很好。

现在我更改了rootViewController“我将AMSlidMenuMainVC 类用作rootview”,因此该路径不再可用。

谁能帮帮我。

【问题讨论】:

信息不足。你是如何创建这个视图控制器的?一般来说,您应该在创建它时保存一个指向它的指针。单例是保存应用全局数据的好地方 - 比应用委托更好。 你不应该这样做。最好将 viewController 传递给需要访问它的对象。 是的@DanielT。但是如果每次使用我的 MBViewController 时,我都会丢失我在上面显示的旧数据。我猜最好的方法是在我的 MBViewController 中做单例? 如果您每次使用 VC 都会丢失数据,那么这就是您的问题。让 VC 全球可用并不能解决这个问题。 Plasher 给出了一个好主意:..delegate] window] vc];但我无法获得 vc 因为他没有在 UIWindow 界面中声明:s 【参考方案1】:

您可以将该 ViewController 创建为 AppDelegate 中的属性。然后你就可以在任何地方使用它来访问它(因此它不是最适合编程的形式)

MBViewController vc =  (MBViewController *)[[[UIApplication sharedApplication] delegate] _viewController];

【讨论】:

谢谢我试过 MBViewController *vc = (MBViewController *)[[[[UIApplication sharedApplication] delegate] window] _viewController]; 但他没有为我找到 _viewController 并且我在我的 AppDelegate 中创建为属性 回答已编辑,它不是窗口,只是委托。立即尝试 它也不起作用编译错误是不知道选择器'_viewController'的实例方法 vc = ((MBAppDelegate *)[UIApplication sharedApplication].delegate)._viewController;它试过这个,它工作,但我想我仍然需要在我的 ViewController 上做一个单例

以上是关于从随机类访问 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

详解 随机访问流

随机访问

使用超类和扩展类方法写入随机访问文件

减去和比较随机访问迭代器:为啥和在哪里?

将类数据存储在随机访问文件中的最佳实践

ArrayList 源码分析