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”类型的值

Xcode:将信息从 UITableViewController 传递到 UIViewController

Dealloc 方法从 XCode 4.1 UIViewController 模板中消失了