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

时间:2016-09-27 18:54:40

标签: ios xcode8 xcode-storyboard

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

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

itertools.combinations()

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

21 个答案:

答案 0 :(得分:115)

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

  1. 在此目录中查找import './<your style path>/<your style file>.scss' 日志: IBDesignablesAgentCocoaTouch并查看原因。

  2. 转到编辑器 - &gt;在故事板中选择~/Library/Logs/DiagnosticReports时调试所选视图,并查看堆栈跟踪。

  3. 删除Derive Data文件夹。

    @IBDesignable UIView
  4. 清理您的项目Xcode Preference -> Location -> Derived Data /Users/YourMacName/Library/Developer/Xcode/DerivedData + Shift + Command + {{ 1}}。

  5. 构建项目Alt + K

答案 1 :(得分:60)

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

  1. 转到File > Workspace settings
  2. 单击“派生数据”旁边的小右箭头。这将在DerivedData文件夹的位置打开Finder应用程序。
  3. 进入DerivedData文件夹,然后删除与项目对应的文件夹。
  4. 退出Xcode,然后重新打开它。
  5. 清理项目 shift 命令 k
  6. 构建项目命令 b
  7. 打开你的故事板。
  8. 转到Editor > Refresh all views
  9. <强>更新

    有时直接转到Editor > Refresh all views工作。如果Refresh all views被禁用,请退出Xcode并重试。

答案 2 :(得分:42)

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

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

答案 3 :(得分:34)

我在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

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

答案 4 :(得分:8)

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

答案 5 :(得分:7)

我的问题是通过从派生数据文件夹中删除文件夹(与此项目相关)来解决的。 您可以通过单击文件 - &gt;来完成此操作。项目设定 - &gt; 然后单击箭头符号deside /Users/.../Xcode/DerivedData 单击DerivedData文件夹,您将看到名为folders的项目删除那些。退出xcode打开你的项目,使用这一步Product-&gt; clean清理项目 然后构建项目:Product-&gt; Build 这些将解决这个问题。

答案 6 :(得分:6)

在我的@IBDesignable类中添加以下代码即可达到目的。

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

答案 7 :(得分:6)

Correct answer provided by @Maria

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] RewriteCond %{HTTP_HOST} ^www.olddomain.com$ RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L] </IfModule> 上查看崩溃报告

替代方式

  1. 打开~/Library/Logs/DiagnosticReports

enter image description here

  1. 键入Spotlight

enter image description here

  1. 选择console.app

enter image description here

  1. 检查一个Crash reports并查看崩溃日志

答案 8 :(得分:2)

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

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

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

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

答案 9 :(得分:2)

打开你的故事板 - &gt;编辑 - &gt;刷新所有视图。 这项工作适合我。

答案 10 :(得分:1)

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

我决定尝试注释掉我的UIView的IBDesignable扩展,它立即解决了该问题。因此,要解决此问题,请找到引起问题的扩展,并确保通过创建IBDesignable类并提供所需的初始化程序来设置所需的init,如下所示:

@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() {
}
}

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

答案 11 :(得分:1)

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

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

答案 12 :(得分:0)

就我而言,我面临这个问题是因为我使用了一个产生该错误的类,只要停止使用它,问题就解决了!。这是我使用的类,我更改为 UIView,然后错误消失了

enter image description here

答案 13 :(得分:0)

在我的@IBDesignable类中崩溃,是因为我使用了自定义类的颜色,并强制展开了@IBDesignable类的颜色,而展开时发现nil无效

因此,您需要在IBDesignablesAgent-iOS_[Date]_[YourMac].crash上的~/Library/Logs/DiagnosticReports位置上找到{{1}},然后使用受尊重的文件路径来了解崩溃的原因。

现在,您必须检查受尊重的文件。

答案 14 :(得分:0)

这对我来说是最简单的方法:将此脚本添加到您的Podfile

Podfile:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if target.product_type == "com.apple.product-type.bundle"
    target.build_configurations.each do |config|
      config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
    end
  end
end

来源:

此@IBDesignable的解决方法可以在这里找到:https://github.com/CocoaPods/CocoaPods/issues/5334

答案 15 :(得分:0)

更新到最新的XCode版本后,我遇到了这个问题。尝试了上述多种解决方案后,我只使用了Xcode,然后关闭了系统并打开它,对我有用。

答案 16 :(得分:0)

遇到相同的错误: 如果已自定义UITextField并使用界面生成器,则控制台中的错误是 -对类“ CustomField”使用未实现的初始化程序“ init(frame :)”

添加了初始化程序以纠正错误

答案 17 :(得分:0)

如果您将xib文件用于自定义uiview。试试这个:

更改自

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

收件人:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)

答案 18 :(得分:0)

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

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

enter image description here

答案 19 :(得分:0)

就我而言,我使用的是一个子类化UIView的库。它正在使用IB_DESIGNABLE,并且错过了对[super awakeFromNib]的调用。一旦我添加了对此方法的调用,该错误就会消失。

我不确定它实施IB_DESIGNABLE的事实是否会对此产生影响。

答案 20 :(得分:0)

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