When I write my own UIButton
-extended class and make it @IBDesignable
, I receive two errors in Interface Builder, namely:
- Main.storyboard: error: IB Designables: Failed to update auto layout status: The agent crashed because the fd closed
- Main.storyboard: error: IB Designables: Failed to render instance of RandjeUIButton: The agent crashed
Here is my code:
import UIKit
@IBDesignable
class RandjeUIButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backgroundColor = UIColor.blackColor()
}
}
I am working in Xcode 7 beta 2 on OS X 10.11 beta 2. (Running in VM)
I found something really important when using an UIImage in any class marked @IBDesignable. The classic UIImage init would crash the agent:
The solution is to use this init method of UIImage:
Working code example:
Where self is your class with the @IBDesignable keyword. Xcode 9.4, Swift 4.1
Xcode's Interface Builder requires that you implement both or neither initializers for
@IBDesignable
classes to render properly in IB.If you implement
required init(coder aDecoder: NSCoder)
you'll need to overrideinit(frame: CGRect)
as well, otherwise "the agent will crash" as seen in the errors thrown by Xcode.To do so add the following code to your class:
There are a myriad of problems that can cause this. Fire up Console, and look for the crash report
IBDesignablesCocoaTouch...
I just sorted out a problem with a 3rd party designable which had issues with the
valueForKey
semantics.