编辑情节提要时 Xcode Interface Builder 崩溃
Posted
技术标签:
【中文标题】编辑情节提要时 Xcode Interface Builder 崩溃【英文标题】:Xcode Interface Builder crashes when I edit storyboard 【发布时间】:2012-09-16 20:21:41 【问题描述】:我是 Xcode 的新手,在使用 Interface Builder 时遇到了 IDE 崩溃的问题。这是 Xcode 4.5。
它可以正常工作很长时间,足以让我在情节提要中添加十几个按钮 - 但是当我尝试调整其中任何一个按钮的大小时,它会崩溃并退出。如果我移动一个按钮,它就会崩溃。如果我添加一个像标签这样的新对象,它有时会崩溃,但并非总是如此。
如果我不尝试编辑情节提要,项目将在模拟器上构建并运行,没有任何问题。
我在下面粘贴了看起来像是崩溃报告的相关部分的内容。为了节省空间,我从“视图层次结构”部分向下删除了所有内容,但如果有用,我可以添加它。所有的崩溃报告都指向同一个错误。
有趣的是,当我查看控制台日志时,Interface Builder 在每次崩溃之前都有另一份报告:
25/09/2012 10:46:35.661 Interface Builder Cocoa Touch Tool: CFPreferences:
user home directory at file://localhost/Users/me/Library/Application Support/
iPhone Simulator/User/ is unavailable. User domains will be volatile.
没错——那个目录不存在。我有 iPhone Simulator/6.0,但没有别的。我以该路径中的用户身份登录。
根据 Stack Overflow 和其他地方的其他建议,我尝试清理构建,然后删除整个 iPhone Simulator 目录并让模拟器重新创建它,但这没有区别。
作为一个实验,我刚刚创建了一个新项目并将一些按钮和标签拖到情节提要中。这似乎很好。没有崩溃。
这是否表明我的其他项目中的某些内容已损坏?
非常欢迎任何建议。这不是一个重要的项目——我在这个阶段正在学习我的方式——但如果有什么问题导致了问题,那么我想在开始使用 Xcode 进行任何认真的工作之前解决它。
提前致谢。
詹姆斯
Process: Xcode [650]
Path: /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier: com.apple.dt.Xcode
Version: 4.5 (1839)
Build Info: IDEApplication-1839000000000000~3
App Item ID: 497799835
App External ID: 10747437
Code Type: X86-64 (Native)
Parent Process: launchd [129]
Date/Time: 2012-09-25 10:46:43.202 +0100
OS Version: Mac OS X 10.7.5 (11G56)
Report Version: 9
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Application Specific Information:
ProductBuildVersion: 4G182
ASSERTION FAILURE in /SourceCache/IDEInterfaceBuilderCocoaTouch/IDEInterfaceBuilderCocoaTouch-1926/IBPlugin/Utilities/IBObjectMarshalling.m:651
Details: Failed to arbitrate IBNSLayoutConstraint, IBUIButton, IBUILabel, IBUIView, and IBUIViewController.
Interface Builder encountered an error communicating with the ios Simulator. If you choose to file a crash report or radar for this issue, please check Console.app for crash reports for "Interface Builder Cocoa Touch Tool" and include their content in your crash report.
Exception name: IBAssertionFailure
Exception reason: ASSERTION FAILURE:
Reason: All views needing candidate constraints have already had constraints generated. This most likely indicates a bug involving layout of the following views:
Layout engine frame (20, 60, 282, 57) of <UILabel: 0xb36f590; frame = (20 60; 281 57); text = '0'; clipsToBounds = YES; opaque = NO; autoresize = TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xb36f620>> does not match canvas frame (20, 60, 281, 57)
Layout engine frame (236, 328, 66, 43) of <UIRoundedRectButton: 0xb384590; frame = (236 328; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb384660>> does not match canvas frame (236, 328, 65, 43)
Layout engine frame (236, 124, 66, 43) of <UIRoundedRectButton: 0xb38ea10; frame = (236 124; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb38eae0>> does not match canvas frame (236, 124, 65, 43)
Layout engine frame (236, 175, 66, 43) of <UIRoundedRectButton: 0xb390a30; frame = (236 175; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb36e8e0>> does not match canvas frame (236, 175, 65, 43)
Layout engine frame (236, 226, 66, 43) of <UIRoundedRectButton: 0xb392a90; frame = (236 226; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb392b60>> does not match canvas frame (236, 226, 65, 43)
Layout engine frame (236, 277, 66, 43) of <UIRoundedRectButton: 0xb394b70; frame = (236 277; 65 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xb394c40>> does not match canvas frame (236, 277, 65, 43)
【问题讨论】:
【参考方案1】:更新:进一步的实验显示情节提要的“使用自动布局”复选框。关闭它然后保存文件似乎已经解决了这个问题。我可以随意编辑,不会再出现崩溃。
【讨论】:
我也遇到了同样的问题,而且似乎是同样的崩溃,但我没有使用情节提要。您在情节提要的哪里检查了“使用自动布局”?或者,这个复选框是在其他地方吗?谢谢 什么时候崩溃?您的应用程序是否有带有某种视图的(空白)故事板?该复选框位于检查器中——Interface Builder 的右侧窗格中。将其 关闭 解决了我的问题。如果找不到,请告诉我,我会添加屏幕抓取。祝你好运。 在单视图应用中编辑 .xib 时崩溃;我只需要按照您的建议取消选中 xib 的“使用自动布局”,谢谢 如果每次选择故事板时,xcode 都会挂起并且我必须强制退出,我该如何取消选中该框。 我遇到了类似的问题,但奇怪的是,XIB 是 而不是当 xib 文件格式不同,但都在同一个项目中时,会发生这种情况。就我而言,一些 xib 文件与 xcode5 dp 兼容,但其他文件与 xcode 4.6 兼容
这里的目的是寻找xib文件的差异
希望这对未来的人们有所帮助!
【讨论】:
谢谢,这似乎解决了我的问题。【参考方案3】:这个问题可能与现在两种不同尺寸的 iPhone 视网膜显示屏(3.5" 和 4")以及它如何与视图的 Mode:Scale To Fill 以及可能 交互有关Autosize Subviews,同样——这两者都是默认启用的。
例如,在我的例子中,我有一个 4" 视网膜大小的 MainView 和紧凑的按钮视图。但是模拟器设置为 3.5 视网膜显示。因为我的按钮视图大小只有 43x43px 并且彼此相邻,这将导致按钮位置以重叠的方式自动缩小,当它们的位置被调整为 3.5" 显示器时(Scale To Fill a smaller空间)——因为它们不能缩小尺寸。这种视图的重叠似乎可能会导致自动布局系统出现问题。因此,我认为是崩溃。
这无疑也是崩溃报告中提到与模拟器通信的原因,即使我们只在 Interface Builder 中工作,这在以前似乎并不直观。
【讨论】:
同意。不过,特殊之处在于,虽然关闭自动布局可以修复崩溃,但之后再次打开它不会让问题再次出现。奇怪的。你用你的试过吗?我让它一直打开,没有其他问题 - 这让我觉得有些东西已经损坏了。【参考方案4】:我也遇到了这个错误,对我来说问题是 TableView 有一些限制。删除所有约束后,错误停止出现。
【讨论】:
以上是关于编辑情节提要时 Xcode Interface Builder 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
iOS Xcode - 编辑情节提要对象导致视图控制器场景复制另一个场景然后 Xcode 崩溃
Xcode/iOS-无法编辑表格视图单元格的内容...我正在使用情节提要编辑器