Tengo una muy simple subclase de UITextView que añade el «Marcador de posición» funcionalidad que usted puede encontrar nativo para el objeto de Campo de Texto. Aquí está mi código para la subclase:

import UIKit
import Foundation

@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
    @IBInspectable var placeholder: String = "" {
        didSet {
            setPlaceholderText()
        }
    }
    private let placeholderColor: UIColor = UIColor.lightGrayColor()        
    private var textColorCache: UIColor!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.delegate = self
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textViewDidBeginEditing(textView: UITextView) {
        if textView.text == placeholder {
            textView.text = ""
            textView.textColor = textColorCache
        }
    }

    func textViewDidEndEditing(textView: UITextView) {
        if textView.text == "" && placeholder != "" {
            setPlaceholderText()
        }
    }

    func setPlaceholderText() {
        if placeholder != "" {
            if textColorCache == nil { textColorCache = self.textColor }
            self.textColor = placeholderColor
            self.text = placeholder
        }
    }
}

Después de cambiar la clase para el UITextView objeto en la Identidad del Inspector de PlaceholderTextView, puedo configurar el Placeholder propiedad muy bien en el Atributo Inspector. El código funciona muy bien cuando se ejecuta la aplicación, pero no muestra el texto de marcador de posición en el interface builder. También tengo la siguiente no-errores de bloqueo (supongo que esto es por qué no ha de renderizado en tiempo de diseño):

de error: IB Designables: Error al actualizar el diseño automático estado: Generador de Interfaz Cocoa Touch Herramienta se estrelló

de error: IB Designables: Error al procesar instancia de PlaceholderTextView: la Representación de la vista tomó más tiempo de 200 ms. Su código de dibujo puede sufrir de un rendimiento lento.

Yo no soy capaz de averiguar cuál es la causa de estos errores. El segundo error no tiene ningún sentido, ya que ni siquiera estoy primordial drawRect(). Alguna idea?

  • Yo estaba recibiendo este error. El objeto trabajado bien en un proyecto de prueba, pero no en mi proyecto principal (en una tabla). De acuerdo a developer.apple.com/library/mac/recipes/…, decidí Elegir el Editor > Depurar Vistas Seleccionadas. Luego me puse «no Podía vistas de depuración» Garantizar «su marco, que tiene la correcta configuración de generación de edificio para iOS.» No encontré nada en Google para este error.
InformationsquelleAutor Albert Bori | 2014-12-09

21 Comentarios

  1. 234

    Hay informes de errores generados al Generador de Interfaz Cocoa Touch Herramienta de accidentes. La tesis se encuentra en ~/Library/Logs/DiagnosticReports y nombre IBDesignablesAgentCocoaTouch_*.crash. En mi caso, que contenía un útil de la pila de seguimiento que identificó el problema en mi código.

    • Gracias! Este fue super útil! ¿Dónde se encuentra la información acerca de los informes de accidentes? 🙂
    • grep 'fatal error' <crash log>
    • En mi caso, descubrí que initFrame(frame: CGRect) debe ser definido. ¿Así que si usted proporciona su propio init método(s).
    • Esta fue la mejor solución. Yo no era de aplicación initWithFrame en uno de los puntos de vista.
    • He utilizado los informes de diagnóstico y como @Travis mencionado, he necesaria para anular la init(frame: CGRect) explícitamente porque yo tenía la costumbre ini método. Usted puede ser que desee mirar a través del informe de accidente de use of unimplemented initializer 'init(frame:)' directamente bajo Application Specific Information en el informe. Gracias chicos! Doble victoria en esta respuesta!
    • cd ~/Library/Logs/DiagnosticReports
    • Perfecto. No te olvides de reiniciar el Xcode si aún así se produce el error.
    • Como de costumbre, este archivo de registro también está disponible en la Consola macOS aplicación, en virtud de la Usuario de Informes de Diagnóstico grupo.
    • Esta fue una gran información para mí. Gracias!

  2. 50

    He tenido el mismo problema un par de veces. Las dos veces que comenzó cuando yo tenía la carga de un IBDesignable punta en el guión cuando la punta no era capaz de encajar en la vista (es decir, yo tenía un botón de apagado de la UIView, pero aún en la mina). Una vez me fijo que Xcode todavía me dio errores, así que he reiniciado Xcode hasta que al azar dejó de darme el error.

    Espero que esto ayude.

    ACTUALIZACIÓN: me acaban de matar a todos los procesos que se denomina «de la Interfaz del Generador de Cocoa Touch Tool», se reinicia el Xcode y el error se fue. No sé si este siempre va a funcionar o no.

    • Confesión: al azar dejó de darme el error, pero mucho ha cambiado desde entonces, y no estoy seguro de lo que hizo el error desaparece. Los dos cambios más importantes son: 1) que se reconstruye el proyecto para utilizar el nuevo swift vainas de cacao beta para la carga en otros swift marcos. 2) he reconstruido la PlaceholderTextView el uso de una subvista de la etiqueta en lugar de real valor de texto… puede haber sido cualquiera de esas cosas.
    • Actualización: El error es de la espalda, justo como como por arte de magia desapareció.
    • Tener este error tan bien, ni idea de cómo solucionarlo.
    • Aunque todavía no entiendo por qué, Si no sobrescribir cualquiera de las init métodos, el código publicado como parte de la pregunta ya no muestra la IB Designables errores y el marcador está adecuadamente representado en el Interface Builder.
    • Puede confirmar. Eso es muy raro. Y muy estúpido.
    • Tal vez este es un error y solo tenemos que esperar para que se fije. Tal vez en Xcode 6.3.
    • También es allí en Xcode 6.2
    • Es todavía alrededor de Xcode 6.4.
    • Ahora acabo de ver este error en Xcode 7.0. Boo.
    • XCode 7.1.1 y todavía presente. Reiniciar XCode no soluciona el problema. Yo había manualmente matar a todos los procesos que se llama Generador de Interfaz Cocoa Touch Herramienta, a continuación, XCode se estrelló, reiniciado y se comenzó a trabajar.
    • Punto importante: de Hecho PRIMERO matar a la interfaz del generador de procesos, a continuación, deje de XCode – si lo hago de la otra manera de solucionar el problema persiste …
    • XCode 8.1 este error persiste. Originalmente causado por no tener init reemplazar, pero persistió después de init añadido. Tenía que matar a la Interfaz del Generador de procesos como se describe a CONTINUACIÓN, reinicie el xcode como @TheEye dice
    • por desgracia, el error desaparece, pero vuelve después de unos minutos de trabajo en IB para mí.
    • Todavía presentes en Xcode 8.2.1, su solución ha funcionado, sin embargo. Gracias!
    • Otra actualización: Corrección funciona para Xcode 9 b1

  3. 39

    En mi caso, yo estaba haciendo el siguiente en la initWithFrame/initWithCoder métodos para crear la vista:

    className = NSStringFromClass([self class]);
    self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

    Parece que fue No supone que el uso de la Principal Paquete de, pero en lugar del paquete de la clase. Así que me reemplazaron el código para el siguiente y funcionó:

    bundle = [NSBundle bundleForClass:[self class]];
    className = NSStringFromClass([self class]);
    self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];

    Pensé que tal vez esto podría ayudar a alguien.

    • Que una parte está solucionado mi problema…. maldito xcode 🙂
    • Esta solucionado mi problema también! Gracias @jmoukel!
    • Que una solucionado mi problema. Hombre!!! yo no pude notar que «bundleForClass» de la línea a pesar de que yo veía en esta solución par de veces. 🙁
    • let bundle = Bundle(for: ValidatingTextField.self) en Swift
  4. 14

    Puede seleccionar la vista personalizada en el Interface Builder y, a continuación, utilizar
    Editor, Debug Selected Views. Se pondrá en marcha los llamados IBDesignableAgentCocoaTouch sesión de depuración cuando todos los puntos de interrupción (incluyendo la excepción de los puntos de interrupción) de trabajo y se podía identificar con exactitud el lugar de su vista se bloquea.

    • Muy útil truco, ayudó a resolver mi caso.
    • Perfecto! Esto se encuentra también mi problema – una fuente incorrecta. Lo que explica por qué sólo uno de los seis muy similar IBDesignables estaba fallando.
    • tío, eres un héroe
  5. 11

    Para Xcode 8 – Swift

    La adición opcional de valor como valor por defecto en @IBInspectable causando un problema para mí.

    Esto no va a funcionar:

    @IBInspectable var repeatImage: UIImage = UIImage(named:"myImage")!{
          didSet {
           //configureView
          }
    }

    Esto debería funcionar:

    @IBInspectable var repeatImage: UIImage = RepeatImageView.getDefaultImage() {
        didSet {
            //configureView()
        }
    }
    
    class func getDefaultImage() -> UIImage {
        if let defaultImage = UIImage(named: "myImage") {
            return defaultImage
        } else {
            return UIImage()
        }
    }
    • Triste pero cierto…
    • No funciona para mí 🙁 muy triste
    • Que problema que se enfrenta?
    • Manipulación opcional evita el accidente. Pero, ¿sabe usted cuál es la causa de UIImage(nombre:) para devolver nil constantemente?
    • Comentando este código fijo para mí ` @objc @disponibles(*, en desuso, con el nuevo nombre: «fondo») @IBInspectable public var signatureBackgroundColor: UIColor = .blanco { didSet { backgroundColor = signatureBackgroundColor } }`
  6. 9

    Yo estaba experimentando la Interfaz similar Generador de problemas de representación de designables.

    Utilizando la técnica que se sugiere en este respuesta yo era capaz de rastrear el problema para el uso de la imagen literales.

    Representación accidente

    self.backgroundImage.image =  #imageLiteral(resourceName: "rectangleCenter")

    Ninguna representación accidente

    self.backgroundImage.image =  UIImage(named: "rectangleCenter")
    • Usted es un héroe.
    • Alguna idea de por qué la imagen de los literales son incompatibles con el IB? Yo tenía el mismo problema.
  7. 6

    De hecho si usted tiene algunos de edad usuario con los atributos definidos (que no es válido para la vista actual) en cualquier vista de guión gráfico, que puede causar que su agente de bloqueo.

    Además, a veces pasa sólo a causa de un error desagradable de Xcode. A la salida, cuando estás en el storyboard desmarque Editor > Actualización Automática de puntos de vista, a continuación, pasar a otro archivo, limpiar y reiniciar el proyecto. Después de que usted entró en el storyboard de nuevo, puede hacer clic en Editor > Actualización de las Vistas y de verificación automática de uno nuevo. Que uno también se resuelve mi problema de una vez.

    Si ambos no funcionan, entonces probablemente hayas hecho algo malo acerca de su IBDesignable vista, así que elija su estrelló puntos de vista de guión gráfico y depuración haciendo clic en Editor > Vistas de Depuración

    • Eres un regalo de Dios.
  8. 4

    Este no es el caso de esta pregunta, pero tal vez yo pueda ayudar a alguien más.

    He tenido un problema similar cuando en mi @IBDesignable de clase I no se pone en práctica:

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    
        //custom setup
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    
        //custom setup
    }
    • Siempre se debe aplicar ambos métodos init. Init con el marco que se utiliza cuando init su vista de código y init con aDecoder se utiliza de InterfaceBuilder.
  9. 4

    Yo tenía el mismo problema y lo he resuelto mediante la adición de la ‘use_frameworks! a mi proyecto Podfile.

    Espero que sea de ayuda para usted.

    • user_frameworks? o use_frameworks!?
    • use_frameworks!
    • Esto funcionó para mí cuando tuve este problema con JVFloatLabeledTextField
    • Esto fue lo que funcionó para mí, la adopción de un mayor Obj-C, proyecto que fue bastante fuera de fecha. El IB de la luz como un árbol de Navidad después de esto! Gracias.
  10. 3

    En mi caso, que de alguna manera estaba relacionado con un cartago marco que estaba utilizando. He tenido que añadir $(PROJECT_DIR)/Cartago/Build/iOS a la Runpath Rutas de Búsqueda construir configuración

    • Después de probar todos los demás publicados soluciones…esta fue la única corrección que trabajó para mí! Gracias!
  11. 3

    En mi caso, fue un problema con OneSignal. Al parecer, tienen un bug en la versión 2.2.0 y arriba. Cambió a la 2.1.6 y todo genial de nuevo!

    Retirar este.

  12. 1

    Cuando yo depurar esto me enteré de que hay algunas clases que son la modificación de la interfaz de usuario. Normalmente marquelabel que es una subclase de UILabel o cualquier otra clase de subclases UIView y dibujo de la interfaz de usuario en tiempo de ejecución y chocar con el diseño Automático del motor. Tratar de dar fija la anchura o la altura de estas vistas personalizadas. Si esto no soluciona el problema, intente las Siguientes soluciones:-

    Solución 1:- quite el comentario de #use_frameworks dentro de su vaina archivo.

    Solución 2:- prueba a borrar los datos obtenidos. 1. Cerrar la ventana del Editor de su Xcode y dejar de simulador -> 2. Ir a Xcode Preferencias -> Lugares -> 3. Haga clic en la pequeña flecha gris que muestra derivada de la ruta de datos -> 4. Seleccione su proyecto -> 5. Elimine todas las carpetas dentro -> 6. Dejar de Xcode y volver a abrir

  13. 1

    Añadir a la parte inferior de su Podfile y ejecutar pod install

    # Workaround for Cocoapods issue #7606
    
        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
  14. 1

    Añadir este script al final de mi Podfile y realiza pod install de nuevo.

    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
  15. 1

    Un grave problema es cuando se crea @IBDesignable asegúrese de que el cocoapod archivo no se incluye en la UITests o de lo contrario será causa de este accidente.

  16. 0

    Puedo encontrar la razón es que tu xib no es el mismo tamaño que el diseño en el guión gráfico. Asegúrese de que el xib tiene la misma altura y anchura.

    • Gracias user6476366.
  17. 0

    Yo estaba solo falta que esta línea de código
    platform :ios, '7.0'
    y el problema se solucionó. Sólo esta línea en su vaina de archivo y actualización de su vaina problema será resuelto.

  18. 0

    Para mí fue una falta de firma de certificado, porque nunca corrió la aplicación, así que Xcode todavía no crear un certificado. Una vez me encontré con la aplicación, el IBDesignable representación funcionaba bien.

  19. 0

    Es como si tienes el Código de otros Desarrolladores y aparece este error.
    Sólo tiene que ejecutar

    pod install

    Esto funcionó para mí.
    Espero Que ayude.

  20. 0

    Asegúrese de que usted no está directamente inicializar UIImage o UIFont el uso de los activos o de las fuentes añadidas en su proyecto.

    Yo siempre crear un private func setUp() en mi @IBDesignable personalizado UI clases.
    la que se llama desde init(frame: CGRect), init?(coder aDecoder: NSCoder). Así que finalmente he actualizado el setup() como la siguiente.

    private func setUp() {
    
         //... Doing initial configurations
    
         //iconImageView.image = UIImage(named: "IconImageName")! //Causing the Crash, use if let OR guard let instead
         if let icon = UIImage(named: "IconImageName") {
              iconImageView.image = icon
              iconImageView.frame.size = icon.size
         }
    
         //nameLabel.font =  UIFont(name: "Calibri-Light", size: 15.0) //Causing the Crash, use if let OR guard let instead
         if let font = UIFont(name: "Calibri-Light", size: size) {
              nameLabel.font =  font
         } else {
              nameLabel.font = UIFont.systemFont(ofSize: size) 
         }
    
         //Doing other stuffs
    }
  21. -1

    Sólo vamos a construir y ejecutar en el simulador si usted tiene un error en alguna otra parte del proyecto solo un comentario y ejecutar con diseños primera actualización de diseños a medida y elimine los comentarios de los otros códigos.
    A mí me funciona.

Dejar respuesta

Please enter your comment!
Please enter your name here