UIViewController的子类无法调用loadView方法

时间:2015-09-07 06:49:46

标签: objective-c uiviewcontroller ios9 xcode7

我有一个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中存在此问题。 如果有人知道为什么会发生这种情况,如果有解决方案,那就太好了。谢谢。

2 个答案:

答案 0 :(得分:1)

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

我正在维护一个拥有2' main'故事板名为Main_iPhone和Main_iPad,您可以猜测它是根据您启动的设备动态加载的。我注意到只有iPhone笔尖视图如所描述的那样陷入僵局,并且iPad正在加载正常。我唯一可以说的是iPhone故事板已启用本地化,而iPad故事板却没有。所以这里我采取了松散的步骤将其从基本本地化中删除(您可能希望在单独的分支/沙箱中执行此操作以确保在删除项目引用之前这样做):

  1. 右键单击有问题的视图和/或故事板,在finder中显示。对我来说,它按预期在Base.lproj文件夹中。
  2. [Re]将文件移动到另一个目录,以便Xcode找不到项目的链接(文件在文件浏览器中变为红色)。按删除可从项目本身的项目文件引用中删除该文件。
  3. 将文件添加回存储库/项目结构中的新位置,以便Xcode将其作为新文件提取。确保您对文件的所有引用都更新到新位置。
  4. 验证您的storyboard / xib文件是否已不再本地化,清理项目,重新运行并查看问题是否仍然存在(请参阅图像)。 Non-localized setting
  5. 您也可以使用右侧文件属性视图中的更新位置按钮更新文件位置(请参阅其他图像)。 enter image description here

    不知道这是否会解决问题,但我认为我分享了帮助他人的机会。

答案 1 :(得分:0)

向苹果发送了一个错误报告,希望很快就会修复 - 问题确实存在于Xcode 7中。 如果遇到类似问题,可以通过执行以下操作之一来解决: 1)使用Xcode 6.4,至少在Apple修复此错误之前。

2)在故事板中重建有问题的视图。

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