【问题标题】:subclass of UIViewController is unable to call loadView methodUIViewController 的子类无法调用 loadView 方法
【发布时间】:2015-09-07 06:49:45
【问题描述】:

我有一个 UIViewController 的子类,当从另一个类调用它时,应用程序会冻结 - 我使用 Xcode 调试器并发现当我尝试访问该类的视图属性时,应用程序会冻结。另一个奇怪的事情是,当我在调试器控制面板中输入:“po objectOfTheProblematicClass.view”时,调试器停止响应。 我使用的代码与此类似:

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
WTStickyViewController *stickyVC = [sb instantiateViewControllerWithIdentifier:@"WTStickyViewController"];
stickyVC.sticky = sticky;
// Setup view controller containment:
[self.parentViewController addChildViewController:stickyVC];

self.containerView = self.parentViewController.view;
[self.containerView addSubview:stickyVC.view];

WTStickyViewController 是 UIViewController 的子类。应用程序在到达时冻结

       [self.containerView addSubview:stickyVC.view];

但这是因为这是第一次调用 stickyVC.view。
例如,如果我会在代码中的某个地方放置

UIView *viewForExample = stickyVC.view;

应用程序会在那里冻结。
完全相同的应用程序在装有 iOS 8 的设备上编译时可以正常工作,但在 iOS 9 上会出现此问题。 如果有人知道为什么会这样,如果有解决方案,那就太好了。谢谢你。

【问题讨论】:

  • 你有没有在你的子类viewLoad方法中调用super
  • 检查你的断点。如果断点条件或命令出错,Xcode 可能会在尝试中断时挂起。
  • 用导致问题的相关代码更新您的问题。
  • @PetahChristian 即使没有断点,应用也会冻结。
  • @RaheelSadiq 如果这就是你的意思,我没有覆盖 loadView

标签: objective-c uiviewcontroller ios9 xcode7


【解决方案1】:

我遇到了类似的问题,这绝对令人抓狂。由于应用程序死锁,调试期间资源监视器中的 CPU 达到 100% 左右。打印到控制台或只是通常访问视图控制器的视图属性会导致此行为。最终,对我来说“修复”它的是从基本本地化文件中删除它。我知道这没有意义,但我会尽可能详细说明。

我正在维护一个旧版通用应用程序,该应用程序具有 2 个名为 Main_iPhone 和 Main_iPad 的“主”故事板,您可能会猜到它们是根据您正在启动的设备动态加载的。我注意到只有 iPhone nib 视图像描述的那样死锁,并且 iPad 加载正常。我唯一能说的是 iPhone 故事板启用了本地化,而 iPad 故事板没有。因此,这是我从基础本地化中删除它的步骤(您可能希望在单独的分支/沙箱中执行此操作,以确保在删除项目引用之前此操作有效):

  1. 右键单击有问题的视图和/或故事板,在查找器中显示。对我来说,它按预期在 Base.lproj 文件夹中。
  2. [重新]将文件移动到不同的目录,因此 Xcode 无法找到项目的链接(文件在文件浏览器中变为红色)。按 delete 以从项目本身的项目文件引用中删除该文件。
  3. 将文件添加回存储库/项目结构中的新位置,以便 Xcode 将其作为新文件拾取。确保您对文件的所有引用都更新到新位置。
  4. 验证您的故事板/xib 文件不再本地化,清理项目,重新运行并查看问题是否仍然存在(见图)。

您也可以使用右侧文件属性视图中的更新位置按钮来更新文件位置(参见其他图片)。

不知道这是否能解决问题,但我想我会分享对我有帮助的东西,同时它也可以帮助其他人。

【讨论】:

  • 似乎您遇到了完全相同的问题。因为我写了这个问题,所以我咨询了一位比我更有经验的开发人员,我们认为这个问题与新的 Xcode 7 有关。在 Xcode 6 上编译时它工作正常。我们可能会向苹果报告这件事,希望他们能解决这个问题。
  • 这看起来确实很奇怪,我试图在一个测试项目中重新创建它,但还没有成功。如果您提交错误报告,如果您发布开放雷达链接,我将不胜感激。
【解决方案2】:

已向苹果发送了一份错误报告,希望它会很快得到修复 - 问题确实出在 Xcode 7 上。 如果您遇到类似的问题,可以通过执行以下操作之一来解决: 1) 使用 Xcode 6.4,至少在苹果修复这个 bug 之前。

2) 在情节提要中重建有问题的视图。

一旦我有机会与我的经理谈论它,我将发布雷达链接...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多