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

Ala*_*lan 141 ios xcode-storyboard xcode8

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

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

在此输入图像描述

这些观点正在使用从自定义视图唯一的看法TextFieldEffectsBEMCheckbox我进口(使用CocoaPods).

Mar*_*ria 140

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

  1. 查找IBDesignablesAgentCocoaTouch此目录中的日志: ~/Library/Logs/DiagnosticReports并查看原因.

  2. @IBDesignable UIView在故事板中选择您的故事时,转到编辑器 - >调试选定视图,然后查看堆栈跟踪.

  3. 删除Derive Data文件夹.

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
    Run Code Online (Sandbox Code Playgroud)
  4. 清理你的项目Shift + Command + Alt + K.

  5. 建立你的项目Command + B.

  • 使用这种方法,我能够发现原因是"致命错误:使用未实现的初始化程序'init(frame :)'用于类'TestIBKit.Button'.我不知道`IBDesignablesAgentCocoaTouch`进程调用`init(frame:)`而不是`init?(coder aDecoder:)`. (20认同)
  • @YevhenDubinin谢谢你,这对我很有帮助.在我的UIButton子类中实现`init(frame:)`后,一切都很好 (2认同)
  • 这解决了我的问题,但是在删除派生数据之前,我必须退出xCode (2认同)
  • 最佳答案 init(frame:) 是常见问题 (2认同)
  • 退出 xcode 并清除 DerivedData。它解决了这个问题。 (2认同)

mne*_*c23 72

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

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

更新

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


Rya*_*uen 48

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

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

  • 它很荒谬,但是有效。 (3认同)

Jer*_* Li 37

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

更新:

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

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
Run Code Online (Sandbox Code Playgroud)

参考:https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

  • 工作,1.5.0豆荚. (4认同)
  • 它对我有用,你应该在最后一段代码中添加`end`. (3认同)

Zai*_*han 12

将以下代码添加到我的@IBDesignable类中就可以了.

override init(frame: CGRect) {
    super.init(frame: frame)
}
Run Code Online (Sandbox Code Playgroud)


小智 8

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


Mit*_*nci 7

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


gbk*_*gbk 7

@Maria 提供的正确答案

检查崩溃报告 ~/Library/Logs/DiagnosticReports

替代方式

  1. 打开 Spotlight

在此处输入图片说明

  1. 类型 console.app

在此处输入图片说明

  1. 选择 Crash reports

在此处输入图片说明

  1. 检查一个IBDesignablesAgent-iOS并查看崩溃日志

  • Spotlight 解决方案很简单,并且需要零神经元被烧毁。如果您的大脑已经有点过度劳累并且无法遵循指示,那就是这样了!:D (2认同)

Ste*_*ras 6

对于找不到该IBDesignablesAgentCocoaTouch文件或尝试从编辑器“调试选定的视图”的任何人(例如我)都会出现错误,这是调试那些“无法渲染”错误的另一种方法。

打开“控制台”应用程序,从边栏中选择您当前的Mac(默认情况下可能会自动选择它),然后在搜索栏上搜索“ IBSceneUpdate”,然后按Enter。每次遇到无法渲染IBDesignable的Xcode错误时,您还将获得一个新的“ IBSceneUpdate”条目,其中包含有关该错误的更多详细信息。至少我无法调试IBDesignable错误!

在此处输入图片说明


Lal*_*hna 5

我尝试清理并运行该项目无法解决此问题。

但是关闭并重新打开该项目确实如此。


小智 5

If you're using xib file for custom uiview. Try this:

Change from

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
Run Code Online (Sandbox Code Playgroud)

To:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)
Run Code Online (Sandbox Code Playgroud)