UIViewController 的子类无法调用 loadView 方法
subclass of UIViewController is unable to call loadView method
我有一个 UIViewController 的子class,当它被另一个 class 调用时,应用程序就死机了 - 我使用了 Xcode 调试器并认为当我试图访问 class 的视图 属性 应用程序冻结。另一件奇怪的事情是,当我在调试器控制面板中键入:"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 的子class。应用程序在达到
时冻结
[self.containerView addSubview:stickyVC.view];
但这是第一次调用 stickyVC.view。
例如,如果我将代码放在某处
UIView *viewForExample = stickyVC.view;
应用程序会在那里冻结。
完全相同的应用程序在使用 iOS 8 的设备上编译时工作正常,但在使用 iOS 9 时出现此问题。
如果有人知道为什么会这样,如果有解决方案那就太好了。谢谢你。
我遇到了类似的问题,这真是令人抓狂。由于应用程序死锁,在调试期间,CPU 在资源监视器中达到了大约 100%。打印到控制台或只是一般访问视图控制器的视图 属性 导致了此行为。最终,对我来说 'fixed' 是将其从基本本地化文件中删除。我知道这没有意义,但我会尽可能详细说明。
我正在维护一个遗留的通用应用程序,它有 2 个 'main' 故事板,分别称为 Main_iPhone 和 Main_iPad,您可能猜到它们是根据您使用的设备动态加载的正在发射。我注意到只有 iPhone nib 视图如所描述的那样死锁,而 iPad 加载正常。我唯一能说的是 iPhone 故事板启用了本地化,而 iPad 故事板没有。所以这是我松散地从基本本地化中删除它的步骤(你可能想在一个单独的 branch/sandbox 中执行此操作以确保在删除项目引用之前它有效):
- 右键单击有问题的视图 and/or 有问题的故事板,在查找器中显示。对我来说,它按预期位于 Base.lproj 文件夹中。
- [重新]将文件移动到不同的目录,这样 Xcode 就找不到 link 项目(文件在文件浏览器中变为红色)。按删除键从项目本身的项目文件引用中删除文件。
- 将文件添加回 repository/project 结构中的新位置,以便 Xcode 将其作为新文件选取。确保对文件的所有引用都更新到新位置。
- 验证您的 storyboard/xib 文件不再本地化,清理项目,重新 运行 并查看问题是否仍然存在(见图)。
您也可以使用右侧文件属性视图中的更新位置按钮来更新文件位置(参见其他图片)。
不知道这是否会解决它,但我想我会分享对我有帮助的东西,希望它也能帮助其他人。
错误报告已发送给 apple,希望它能尽快修复 - 问题确实出在 Xcode 7。
如果您遇到类似问题,可以通过执行以下操作之一来解决:
1) 使用 Xcode 6.4,至少在苹果修复这个错误之前。
2) 在故事板中重建有问题的视图。
我会post雷达link一旦我有机会和我的经理谈谈这件事...
我有一个 UIViewController 的子class,当它被另一个 class 调用时,应用程序就死机了 - 我使用了 Xcode 调试器并认为当我试图访问 class 的视图 属性 应用程序冻结。另一件奇怪的事情是,当我在调试器控制面板中键入:"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 的子class。应用程序在达到
时冻结 [self.containerView addSubview:stickyVC.view];
但这是第一次调用 stickyVC.view。
例如,如果我将代码放在某处
UIView *viewForExample = stickyVC.view;
应用程序会在那里冻结。
完全相同的应用程序在使用 iOS 8 的设备上编译时工作正常,但在使用 iOS 9 时出现此问题。
如果有人知道为什么会这样,如果有解决方案那就太好了。谢谢你。
我遇到了类似的问题,这真是令人抓狂。由于应用程序死锁,在调试期间,CPU 在资源监视器中达到了大约 100%。打印到控制台或只是一般访问视图控制器的视图 属性 导致了此行为。最终,对我来说 'fixed' 是将其从基本本地化文件中删除。我知道这没有意义,但我会尽可能详细说明。
我正在维护一个遗留的通用应用程序,它有 2 个 'main' 故事板,分别称为 Main_iPhone 和 Main_iPad,您可能猜到它们是根据您使用的设备动态加载的正在发射。我注意到只有 iPhone nib 视图如所描述的那样死锁,而 iPad 加载正常。我唯一能说的是 iPhone 故事板启用了本地化,而 iPad 故事板没有。所以这是我松散地从基本本地化中删除它的步骤(你可能想在一个单独的 branch/sandbox 中执行此操作以确保在删除项目引用之前它有效):
- 右键单击有问题的视图 and/or 有问题的故事板,在查找器中显示。对我来说,它按预期位于 Base.lproj 文件夹中。
- [重新]将文件移动到不同的目录,这样 Xcode 就找不到 link 项目(文件在文件浏览器中变为红色)。按删除键从项目本身的项目文件引用中删除文件。
- 将文件添加回 repository/project 结构中的新位置,以便 Xcode 将其作为新文件选取。确保对文件的所有引用都更新到新位置。
- 验证您的 storyboard/xib 文件不再本地化,清理项目,重新 运行 并查看问题是否仍然存在(见图)。
您也可以使用右侧文件属性视图中的更新位置按钮来更新文件位置(参见其他图片)。
不知道这是否会解决它,但我想我会分享对我有帮助的东西,希望它也能帮助其他人。
错误报告已发送给 apple,希望它能尽快修复 - 问题确实出在 Xcode 7。 如果您遇到类似问题,可以通过执行以下操作之一来解决: 1) 使用 Xcode 6.4,至少在苹果修复这个错误之前。
2) 在故事板中重建有问题的视图。
我会post雷达link一旦我有机会和我的经理谈谈这件事...