@IBDesignable崩溃代理
当我编写自己的UIButton @IBDesignable类并使其@IBDesignable ,我在Interface Builder中收到两个错误,即: 
- Main.storyboard:错误:IB Designables:无法更新自动布局状态:代理崩溃,因为FDclosures
- Main.storyboard:错误:IB Designables:无法呈现RandjeUIButton的实例:代理程序崩溃
这是我的代码:
 import UIKit @IBDesignable class RandjeUIButton: UIButton { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.backgroundColor = UIColor.blackColor() } } 
我正在OS X 10.11 beta 2上使用Xcode 7 beta 2(在VM中运行)
  Xcode的界面生成器要求你实现@IBDesignable类的两个或两个初始化器,以在IB中正确呈现。 
 如果你实现了required init(coder aDecoder: NSCoder)你也需要重写init(frame: CGRect) ,否则“代理将崩溃”,就像Xcode抛出的错误一样。 
为此,请将以下代码添加到您的类中:
 override init(frame: CGRect) { super.init(frame: frame) } 
我遇到了同样的问题,并以这种方式解决它:
- 问题:
错误:IB Designables:无法更新自动布局状态:代理崩溃
- 在检查文件中finddebuggingbutton并点击它。

- 
然后Xcode会告诉你这个问题在哪里。 在我的情况下,我在 IBDesignable前放下IBDesignable。
- 
然后我清理并重build它,错误消失了 
在Xcode 7.3中,上述解决scheme都没有为我工作,但是这个问题被接受的答案是: 无法呈现IB Designable的实例
- 清除项目的Xcode派生数据。 它们在〜/ Library / Developer / Xcode / DerivedData中
- 按⌘⇧K清理当前版本
- build立你的项目
- 在故事板中进入编辑器菜单,并执行刷新所有视图; 等待构build完成,错误应该消失
我不需要做第四步来解决这个问题(并且让我的PaintCode-drawRect'd UIView在storyboard中绘制),以防万一。
感谢@Mojtaba和@WeZZard
 有无数的问题可以导致这一点。 启动控制台,并查找崩溃报告IBDesignablesCocoaTouch... 
 我刚刚解决了与valueForKey语义有问题的第三方可devise的问题。 
只需在另一个Xcode安装系统上重新打开一个代码即可。 在我的情况下,工作。
 对我来说,它并没有使用#if !TARGET_INTERFACE_BUILDER来#if !TARGET_INTERFACE_BUILDER我。 基本上我有一些代码,将导致访问我的包中的path… 
 Bundle.main.path(forResource: "Foo", ofType: "plist") 
 问题是,当运行在IB(而不是在你的应用程序), Bundle.main不是你的应用程序… 
 (lldb) po Bundle.main NSBundle </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays> (loaded) 
 所以对此的回答只是仔细检查你的@IBDesignable UIView代码,并使用#if !TARGET_INTERFACE_BUILDER (在我的情况下调用CoreLocation例如)在devise时运行时没有意义。 
我如何debugging和发现这一点
 这是您在使用Editor -> Debug Selected View在您的故事板中select@IBDesignable UIView时Editor -> Debug Selected View : 
  
 
然后你会在正确的位置崩溃
  
 
 就我而言,正如你所看到的, initXXXX正在执行一个assert ,在devise时崩溃了,因为它正在devise时在我的Bundle中find一个值initXXXX 。 
这是我解决这个问题的方法:
- 确保sockets已正确初始化
- @IBInspectable属性将被正确初始化
- 在xib文件中,单击文件的所有者占位符,转到身份检查器,确保它不会有任何默认值
 import UIKit @IBDesignable class TestView: UIView { @IBOutlet weak var label: UILabel! @IBInspectable var textLabel1: String? { get { return label.text } set { label.text = newValue } } // MARK: Setup var view1: UIView! var nibName: String = "TestView" override init(frame: CGRect) { super.init(frame: frame) xibSetup() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) xibSetup() } private func xibSetup() { view1 = loadViewFromNib() view1?.frame = self.bounds view1?.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] if view1 != nil { addSubview(view1!) //textLabel1 = "ok" } } private func loadViewFromNib() -> UIView? { let bundle = NSBundle(forClass: self.dynamicType) let nib = UINib(nibName: nibName, bundle: bundle) for object in nib.instantiateWithOwner(self, options: nil) { if let view: UIView = object as? UIView { return view } } return nil } }