【发布时间】:2012-07-29 15:30:43
【问题描述】:
我快要疯了:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init];
[self.view addSubview:golOlur.view];
我有上面的代码,我在 IBACtion 内的 ViewController 中调用它。 GolOlurActionViewController 是 ViewController,你们都可以猜到。
当进程启动时,golOlur 的viewDidLoad 和viewDidAppear 方法被调用,但视图不呈现。
我已经尝试了我所知道的一切,但无法解决这个问题。
【问题讨论】:
-
等等,我看错了你的代码。为什么要尝试将另一个视图控制器的视图作为子视图添加到这个视图中?这不是 ViewController 的工作方式。您创建一个视图控制器来控制 视图。使用时应将其推送为默认控制器。如果你只需要创建一个
golOlur视图来添加到你当前的视图中,你需要继承UIView--而不是UIViewController。 -
另外,当 IBAction 方法结束时,你有一个问题。如果您使用 ARC,您的
GolOlurActionViewController将被释放,如果您与从中获取的视图进行交互,则会导致崩溃。如果不是 ARC,那就是内存泄漏。 -
@iremk 我同意 Wendi 的观点,即使用
addSubview(令人惊讶地流行)转换到新视图的概念代表了视图控制器与视图角色的根本混淆。 不要使用addSubview在视图控制器的主视图之间转换! -
@PhillipMills 你当然是对的,但我认为你正在解决一个症状(泄漏或崩溃,取决于非 ARC 或 ARC),而不是问题。人们不应该使用
addSubview在视图之间进行转换。 -
@RobertRyan 是的,虽然我并不想尝试解决任何问题,而是尝试添加一些额外的细节,说明整个模式是如何触发其他 SDK 问题的。当我看到这一点时,我想到人们想要创建容器视图控制器而不采取必要的步骤来做到这一点。
标签: iphone objective-c ios uiviewcontroller addsubview