Xcode 8 - IB Designables - 无法呈现和更新自动布局状态,代理程序崩溃

问题描述 投票:114回答:16

我最近升级到Xcode 8,我遇到了故事板的问题。

如果我打开项目并且我没有打开Storyboard,它将编译并运行得很好。一旦我打开故事板,我就会收到有关IB Designables的多个错误,如下所示。

enter image description here

这些视图是使用我使用Cocoapods导入的TextFieldEffectsBEMCheckbox的自定义视图的唯一视图。

ios xcode8 xcode-storyboard
16个回答
124
投票

您可以尝试以下方法之一来找出原因:

  1. 在这个目录中查找IBDesignablesAgentCocoaTouch日志:~/Library/Logs/DiagnosticReports并查看原因。
  2. 在故事板中选择@IBDesignable UIView时,转到编辑器 - >调试所选视图,然后查看堆栈跟踪。
  3. 删除派生数据文件夹。 qazxsw poi
  4. 清洁你的项目Xcode Preference -> Location -> Derived Data /Users/YourMacName/Library/Developer/Xcode/DerivedData + Shift + Command + Alt
  5. 建立您的项目K + Command

1
投票

我遇到了同样的问题,来到这里试图弄清楚发生了什么。我注意到最受欢迎的答案,答案本身并没有帮助我,因为IBDesignable不存在于日志文件夹中,我已经尝试了所有其他选项,但是在评论中我注意到有人在谈论帧初始化。

我决定尝试为UIView评论我的IBDesignable扩展,它立即修复了问题。因此,要解决此问题,请找到导致问题的扩展,并确保通过创建IBDesignable类并提供所需的初始化程序来设置所需的初始化,如下所示:

override init(frame: CGRect) {
    super.init(frame: frame)
}

重要提示:请记住将新类添加到您正在使用可设计项目的项目中。


1
投票

我试过干净并运行该项目不会解决这个问题。

但关闭并重新打开了项目。


0
投票

在进行必要的更改后,更改故事板或在我的情况下更改.xib以在“XCode 7”中打开,保存并关闭。这只是一个解决错误的止损措施,但最终你需要修复它们或直到你不再能够这样做。


0
投票

就我而言,我使用的是一个子类化@IBDesignable class RoundedView: UIView { override init(frame: CGRect) { super.init(frame: frame) sharedInit() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) sharedInit() } override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() sharedInit() } func sharedInit() { } } 的库。它使用UIView,并且缺少对IB_DESIGNABLE的调用。一旦我添加了对此方法的调用,bug就消失了。

我不确定它实施[super awakeFromNib]的事实是否对此有影响。


0
投票

对于像我这样的人 - 无法找到IB_DESIGNABLE文件或者在编辑器中尝试“调试所选视图”时出现错误,这是调试那些“无法渲染”错误的另一种方法。

打开“终端”应用程序,从侧栏选择当前的Mac(默认情况下可能会自动选择),然后在搜索栏中搜索“IBSceneUpdate”并按Enter键。每当您收到IBDesignable无法呈现的Xcode错误时,您还将获得一个新的“IBSceneUpdate”条目,其中包含有关错误的更多详细信息。至少我是如何调试我的IBDesignablesAgentCocoaTouch错误的!

IBDesignable


0
投票

如果您使用xib文件进行自定义uiview。试试这个:

改变

enter image description here

至:

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

0
投票

面对相同的错误:已经定制了UITextField并使用了界面构建器,控制台中的错误是 - 使用未实现的初始化程序'init(frame :)'用于类“CustomField”

添加了初始化程序以修复错误


62
投票

我通过执行以下操作解决了问题:

  1. B
  2. 单击“派生数据”旁边的小右箭头。这将在File > Workspace settings文件夹的位置打开Finder应用程序。
  3. 进入DerivedData文件夹,删除与项目对应的文件夹。
  4. 退出Xcode,然后重新打开它。
  5. 清理项目shiftcommandk。
  6. 构建你的项目commandb。
  7. 打开你的故事板。
  8. DerivedData

更新

有时只是直接去Editor > Refresh all views工作。如果禁用Editor > Refresh all views,请退出Xcode并再试一次。


45
投票

我只是删除失败的视图,然后按命令+ Z撤消删除。这个对我有用。

如果稍后编辑失败的视图,可能会再次出现错误,请再次执行上述操作。


36
投票

我在CocoaPod 1.5.0中遇到了这个问题。解决方案是在显示此错误后再次重新安装pod(再次安装pod),或者您可以使用CocoaPod 1.4.0。它在1.4.0中工作正常(至少对我而言)。

更新:

在Podfile中添加以下脚本帮助我解决1.5.0中的问题

Refresh all views

参考:post_install do |installer| installer.pods_project.build_configurations.each do |config| config.build_settings.delete('CODE_SIGNING_ALLOWED') config.build_settings.delete('CODE_SIGNING_REQUIRED') end end


8
投票

尝试为您的故事板中使用的自定义视图可能具有的任何xib文件禁用“使用特征变体”(“标识和类型”面板)。


8
投票

将以下代码添加到我的https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911类中就可以了。

@IBDesignable

7
投票

通过从派生数据文件夹中删除文件夹(与此项目相关)解决了我的问题。您可以通过单击文件 - >项目设置 - >然后单击箭头标志deside /Users/.../Xcode/DerivedData单击DerivedData文件夹,您将看到您的项目命名文件夹删除那些。退出xcode打开你的项目,使用这一步清理项目Product-> clean然后构建项目:Product-> Build这些将解决这个问题。


2
投票

当我调试这个时,我发现有一些类正在修改UI。通常marquelabel是UILabel的子类或任何其他类的子类UIView并在运行时绘制ui并与Autolayout引擎冲突。尝试为这些自定义视图指定固定宽度或高度。如果它无法解决您的问题请尝试以下解决方案: -

解决方案1: - 在pod文件中取消注释#use_frameworks。

解决方案2: - 尝试删除派生数据

  1. 关闭Xcode的编辑器窗口并退出模拟器 - >
  2. 转到Xcode首选项 - >位置 - >
  3. 单击显示派生数据路径的小灰色箭头 - >
  4. 选择您的项目 - >
  5. 删除里面的所有文件夹 - >
  6. 退出Xcode并重新打开

2
投票

只需打开故事板 - >编辑器 - >刷新所有视图。这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.