我们啥时候在它的 AppDelegate 中创建 IBOutlet ViewController 对象?

Posted

技术标签:

【中文标题】我们啥时候在它的 AppDelegate 中创建 IBOutlet ViewController 对象?【英文标题】:When do we create IBOutlet ViewController objects in it's AppDelegate?我们什么时候在它的 AppDelegate 中创建 IBOutlet ViewController 对象? 【发布时间】:2012-08-06 13:54:16 【问题描述】:

首先让我提一下我是 ios 开发新手。

一般我们在XCODE中新建项目的时候,并没有像这样声明的对象

    @property (nonatomic, retain) IBOutlet ViewController *viewController;

在自动创建的AppDelegate.h。 而且大多数创建并作为子视图添加到主视图的自定义视图仍然可以正常工作。

但是在子应用程序中需要声明我们的视图控制器的对象,如上所述。并且必须在AppDelegate.m中添加到window的子视图中,像这样:

    [window addSubview:viewcontroller.view];
    [window makeKeyAndVisible];

否则,某些控制器的视图,例如 MPMediaPlayerController.view(在我的情况下)等无法正确地作为子视图添加到 viewController 的视图中。

为什么会这样?

在什么情况下我们需要在委托类中声明视图控制器的对象?

【问题讨论】:

【参考方案1】:

根据您使用的 Xcode 版本以及定义界面的方式,有不同的答案,但假设最近有故事板,答案是它发生在加载初始控制器期间。

对于要使用的视图控制器,需要保留它,并且窗口的rootViewController 是初始默认值。如果您查看“在启动时配置初始视图控制器”的文档,您会看到列出的一些步骤:

"[...] iOS 执行以下操作:

...

它将窗口的 rootViewController 属性设置为新视图 控制器。”

【讨论】:

以上是关于我们啥时候在它的 AppDelegate 中创建 IBOutlet ViewController 对象?的主要内容,如果未能解决你的问题,请参考以下文章

引用在 AppDelegate 中创建的 NSPersistentStore 实例

我应该啥时候创建 php 文件来在 mysql 数据库中创建表?

从 AppDelegate 访问在故事板的 tableview 中创建的视图?

iOS - 在没有 xib 的项目中创建 xib

ViewDidLoad 在导航时只调用一次

我可以在 iOS 中的代码中创建一个断点,比如 VC++ 上的 `__asmint 3`,然后在它被命中后继续执行吗?