UIViewController 在 Xcode 7 中挂起
Posted
技术标签:
【中文标题】UIViewController 在 Xcode 7 中挂起【英文标题】:UIViewController hangs in Xcode 7 【发布时间】:2015-09-24 15:41:10 【问题描述】:不确定标题是否正确,我在按钮单击时调用 newViewController 但它没有呈现。因为它在 Xcode 6.4 中工作正常,但在 Xcode 7 中它会挂起 UI,并且在 pushViewController 之后不显示新的视图控制器。
这是在控制台打印的错误日志
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x16bbe0c0 V:[UIView:0x157fb230(45)]>",
"<NSLayoutConstraint:0x16bbc390 V:[UIView:0x157fb230(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x16bbe0c0 V:[UIView:0x157fb230(45)]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
我在它调用的下一个控制器的 viewDidLoad 中添加断点,但不加载该 ViewController。
编辑
我看到 CPU 使用率为 100%,第二件事是我的 Viewcontroller 有 tableView,所以当我调试时,它会为所有行调用我的 CellForRowatIndexPath,所以不确定它到底在哪里冻结了我的 ViewController。
更新
我再次更新我的问题,我删除了错误约束(即 45 和 0),现在我在控制台上没有收到任何约束警告或错误,但我的 UIView 仍然冻结。请帮忙谢谢
【问题讨论】:
看起来好像视图可能正在加载但将宽度设置为 0,所以您看不到它(您可能会看到一个黑色空间)。这表明您必须检查布局约束以解决冲突。 您有一个值为 45 的约束,而另一个值为 0 的约束也是如此。调试器表示它将忽略值为 45 的约束。所以保留值为0的那个,可以说明你没有显示什么。 感谢 foundry & Larme 但为什么它没有运行,因为它在 Xcode 6.4 上运行良好(只是发出警告)。第二件事为什么苹果给出视图的内存为什么不给出视图的名称(这可能不是问题,但是的我很沮丧)为什么苹果不让它像 android XML 视图一样简单 请展示你的限制!!! @Mr.T 实际上我很困惑我应该向你展示哪些约束,因为它有 tableview 和多个 tableCell 所以...... 【参考方案1】:您的一个视图中似乎有两个相互冲突的高度限制。一个是告诉你的视图有 0 高度,另一个告诉它有 45。
也与错误消息无关:您不需要“对齐中心 X 到 Superview”约束,因为前导/尾随约束将是隐含的。
编辑:
尝试实现以下初始化程序并使用 [MyViewControllerClass new] 实例化它。我以前在默认情况下加载与视图控制器同名的 nib 的视图控制器的默认行为遇到了麻烦。这当然是假设你没有使用故事板,在这种情况下我真的帮不上忙。
- (instancetype)init
self = [super initWithNibName:@"MyNibName" bundle:nil]
if (self)
return self
【讨论】:
嗨@Nailer,谢谢,我删除了错误约束,但仍然查看挂起,CPU 使用率为 100%。我更新我的问题请看..!因为正如我之前所说,它在 Xcode 6.4 上运行良好 我在不使用带有显式笔尖名称的 initWithNibName:bundle: 初始化程序时遇到了一些麻烦。如果您的应用缺少该功能,请尝试添加它。【参考方案2】:我也遇到了这个问题,它与占位符文本有关(我正在使用情节提要)。清除您在字段中的所有占位符文本,看看它是否有效!我的可以。如果这有帮助,只需在代码中设置占位符文本,而不是故事板。我在这里回答了一个类似的问题:
Instantiating Modal view controller freezes the app - Probable issue with Xcode 7
【讨论】:
以上是关于UIViewController 在 Xcode 7 中挂起的主要内容,如果未能解决你的问题,请参考以下文章
在 xcode 4.2 中将 UITableViewController 转换为 UIViewController
XCode:无法在界面构建器中将 UIView 拖放到 UIViewController 上
在 Xcode 11、SwiftUI 中呈现 UIViewController 的问题
接收问题:无法在 Xcode 上设置“UIViewController”类型的值