Cuando escribo mi propia UIButtonextendido de clase y hacer que @IBDesignable, he recibido dos errores en el Interface Builder, a saber:

  • Principal.guión: error: IB Designables: Error al actualizar el diseño automático estado: El agente se estrelló debido a que el fd cerrado
  • Principal.guión: error: IB Designables: Error al procesar instancia de RandjeUIButton: El agente se estrelló

Aquí está mi código:

import UIKit

@IBDesignable
class RandjeUIButton: UIButton {
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.backgroundColor = UIColor.blackColor()
    }
}

Estoy trabajando en Xcode 7 beta 2 en OS X 10.11 beta 2. (Que se ejecuta en la máquina virtual)

  • Usted necesita para reemplazar init(frame: CGRect) así
  • He hecho eso, los errores sobre el agente se despidió ahora. Todavía estoy viendo build failed en el Interface Builder ahora, cuando la selección de la etiqueta en la Identidad del inspector?
  • Yo también reemplazar reemplazar init(marco : CGRect) y el método init?(coder aDecoder: NSCoder) método. Todavía tengo el mismo error.
InformationsquelleAutor jbehrens94 | 2015-07-07

10 Comentarios

  1. 105

    Xcode del Interface Builder requiere que implemente tanto o ni inicializadores para @IBDesignable clases para procesar correctamente en IB.

    Si implementar required init(coder aDecoder: NSCoder) necesitará reemplazar init(frame: CGRect) así, de lo contrario «el agente de choque», como se ve en los errores arrojados por Xcode.

    Para ello agregue el código siguiente a la clase:

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    • Yo no lo creo que es la razón. Tengo ambos métodos, estoy en 7.2. Todavía es estrellarse.
    • Esta fue la causa para mí, me quita el init(frame: CGRect) ya que sólo fue inicialización de un guión gráfico.
    • Yo también reemplazar reemplazar init(marco : CGRect) y el método init?(coder aDecoder: NSCoder) método. Todavía tengo el mismo error
    • Resultó ser un muy duro depuración reto para mí. Yo era crear subclases de una clase que se presente en otro marco (Pod). La clase padre tenía uno de los métodos init sin el ámbito público (el valor predeterminado es interna). Así, el método init no era visible en mi fuente. Finalmente, di cuenta de esto, y se hizo una copia de la clase padre en mi fuente del proyecto. Muchas gracias!
    • Esta dos init puede que no lo suficiente. Tomar UISegmentedControl como un ejemplo, usted debe implementar también reemplazar init(puntos: [Cualquier]?).
  2. 22

    He tenido el mismo problema y resuelto de esta manera:

    1. El Problema:

    de error: IB Designables: Error al actualizar el diseño automático estado: El agente se estrelló

    1. Encontrar el botón de depuración en el archivo de inspección y haga clic en él.

    @IBDesignable estrellarse agente

    1. A continuación, el Xcode le dirá donde prolem es.
      En mi caso me cae la IBDesignable antes de la clase.

    2. A continuación, la limpieza y reconstrucción, el error desapareció

    • Hola @Azure, me estoy enfrentando el problema por eso. Xcode (7.3) no se mueve de mí a la línea de código lo que está causando el problema, cuando hago clic en el botón de Depuración como ha demostrado muy bien en el agregado de la imagen. Es que el fallo de Xcode?
    • Hola~¿has resuelto tu problema ahora? También el uso de Xcode(7.3). Por favor, asegúrese de que usted elija el punto de vista que conduce a la caída y haga clic en el botón de depuración.
    • No te olvides de crear una «Todas las Excepciones» punto de corte antes de hacer clic en el botón de Depuración, de esta manera el depurador se detiene un par de instrucciones después de la caída, donde usted puede simplemente haga clic en el código en el seguimiento de la pila de listado, o el derecho a la instrucción que está causando el accidente.
  3. 11

    En Xcode 7.3, ninguna de las soluciones anteriores funciona para mí, pero la aceptó respuesta a esta pregunta se hizo: Error al procesar instancia de IB Designables

    1. Claro Xcode los datos obtenidos para el proyecto. Están en ~/Library/Developer/Xcode/DerivedData
    2. Limpiar su versión actual pulsando la tecla ⌘⇧K
    3. La construcción de su proyecto
    4. En storyboard ir a Editor de menú y hacer la Actualización de Todos los puntos de vista; espere a construir para ser completado y errores debe ser pasado

    No tuve la necesidad de hacer el 4º paso para resolver el problema (y mi PaintCode-drawRect había UIView para pintar en el guión gráfico), se incluye aquí por si acaso.

    De crédito a @Mojtaba y @WeZZard

  4. 10

    Hay una miríada de problemas que puede causar esto. El fuego de la Consola, y buscar el informe de accidente IBDesignablesCocoaTouch...

    Acabo solucionado un problema con un 3er partido con diseños que tuvo problemas con la valueForKey semántica.

  5. 8

    Para mí, no fue el uso de #if !TARGET_INTERFACE_BUILDER que me dieron. Básicamente me había algún código que resultaría en el acceso a una ruta en mi Paquete…

    Bundle.main.path(forResource: "Foo", ofType: "plist")

    El problema es que cuando se ejecuta en IB (y no en su aplicación), Bundle.main no es tu app…

    (lldb) po Bundle.main
    NSBundle </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays> (loaded)

    Así que la respuesta a esto es simplemente para revisar su @IBDesignable UIView código con cuidado y uso #if !TARGET_INTERFACE_BUILDER para nada (en mi caso las llamadas a CoreLocation por ejemplo) que no tiene sentido cuando se ejecuta en tiempo de diseño.

    Cómo puedo depurar y encontré este

    Esto es lo que puedes ver cuando se utiliza el Editor -> Debug Selected View mientras que la selección de su @IBDesignable UIView en su guión gráfico:

    @IBDesignable estrellarse agente

    Usted después del accidente en el lugar adecuado

    @IBDesignable estrellarse agente

    En mi caso, como se puede ver initXXXX estaba haciendo un assert, que fue a estrellarse en tiempo de diseño, ya que estaba buscando un valor en el archivo en mi Paquete de — que es Xcode, en tiempo de diseño.

    • ¿Cuál es el punto de uso de @IBDesignable si hemos de usar > #if !TARGET_INTERFACE_BUILDER
  6. 4

    He encontrado algo realmente importante cuando se utiliza un UIImage en cualquier clase marcada @IBDesignable.
    El clásico UIImage init accidente el agente:

    let myImage = UIImage(named: String) // crash the agent

    La solución es utilizar este método init de UIImage:

    let myImage = UIImage(named: String, in: Bundle, compatibleWith: UITraitCollection)

    De trabajo código de ejemplo:

    let appBundle = Bundle(for: type(of: self))
    let myImage = UIImage(named: "myImage", in: bundle, compatibleWith: self.traitCollection))

    Donde el auto es de su clase con el @IBDesignable palabra clave.
    Xcode 9.4, Swift 4.1

  7. 2

    Acaba de volver a abrir un código en otro Xcode de configuración del Sistema. En mi caso Funcionó.

    • Esto parece de trabajo en algunos casos. yo estaba teniendo el mismo problema intentado todas las posibles cosas que no fueron capaces de solucionar el problema, y finalmente hice cerrado el xcode completamente y abrir otro proyecto que no fue la implementación de cualquier @IBDesignable, y abre el proyecto en el que el agente se bloquea y el error de mensajes se han ido. no tengo ninguna validez lógica detrás de eso, pero parece xcode tienen algún consejo directivo 🙁
    • trabajó para mí. Odio estas situaciones tanto argh!
  8. 1

    Esta es la forma en que me resuelve este problema:

    • Asegúrese de que los enchufes están correctamente inicializado
    • @IBInspectable las propiedades de ser inicializado correctamente
    • en xib archivo, haga clic en Archivo propietario del marcador de posición, Ir a la Identidad del inspector, asegúrese de no tener valores predeterminados

    HTML:

    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
        }
        
        
    }

    Uso:

    @IBDesignable estrellarse agente

  9. 1

    XCode 10, Swift 4.2

    He encontrado una respuesta aquí

    Solución era simple: cambiar la forma en que el paquete fue resuelto en el required init?(coder aDecoder: NSCoder) método de mi vista personalizada de clase.

        Bundle.main.loadNibNamed(String(describing: TestView.self), owner: self, options: nil)

    necesitaba ser cambiado a

    let bundle = Bundle(for: TestView.self)
    bundle.loadNibNamed(String(describing: TestView.self), owner: self, options: nil)
  10. 0

    He perdido un día entero en esto y por fin tengo mi problema resuelto @IBDesignable estrellarse agente

    He seleccionado para Construir destino como 8.0 y corrige todo para mí.

    • este uno no trabaja con el Área de seguridad de diseño.

Dejar respuesta

Please enter your comment!
Please enter your name here