Tengo el siguiente código:

CustomView.h

#import <UIKit/UIKit.h>

IB_DESIGNABLE
@interface CustomView : UIView

@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;

@end

CustomView.m

#import "CustomView.h"

@implementation CustomView

- (void)setBorderColor:(UIColor *)borderColor {
    _borderColor = borderColor;
    self.layer.borderColor = borderColor.CGColor;
}

- (void)setBorderWidth:(CGFloat)borderWidth {
    _borderWidth = borderWidth;
    self.layer.borderWidth = borderWidth;
}

- (void)setCornerRadius:(CGFloat)cornerRadius {
    _cornerRadius = cornerRadius;
    self.layer.cornerRadius = cornerRadius;
}

@end

(Para Swift de referencia, este problema también ocurre con el código Swift)

CustomView.swift

@IBDesignable
class CustomView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

    @IBInspectable var borderColor : UIColor = UIColor.clearColor() {
        didSet {
            self.layer.borderColor = borderColor.CGColor
        }
    }

    @IBInspectable var borderWidth : CGFloat = 0.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius : CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }
}

He añadido un UIView a un controlador de vista del guión gráfico y establecer su subclase a CustomView.

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

Esto se suma la «Designables» fila. Está atrapado en «Actualizar» y en la descripción dice «Esperando Objetivo de Construir». Nunca cambia a partir de este estado.

Cuando me mude a los atributos inspeccionar, yo soy capaz de poner estos IBInspectable propiedades:

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

Y, una vez establecido, que también se muestran en la «Definido por el Usuario en tiempo de ejecución Atributos»:

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

Sin embargo, el «Designables» el estado nunca va más allá de la «Actualización» con la misma descripción (he intentado Cmd+B edificio varias veces, no cambia nada).

Además, como establece el IBInspectable propiedades, me sale un aviso para cada uno:

IBDesignables – Ignorando definido por el usuario en tiempo de ejecución atributo de ruta de la clave «borderColor» en la instancia de «UIView» … esta clase no es la clave-valor de codificación compatible con la tecla de borderColor.

Captura de pantalla de las advertencias generadas:

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza


Estoy familiarizado con el valor clave de codificación compatible con temas y en general saber cómo resolverlos… pero no entiendo cómo resolver este problema aquí. De acuerdo a la opinión de identidad del inspector, la vista es un «CustomView» (no regular «UIView», que no tiene estas propiedades). Y si la vista no era un «CustomView», a continuación, estos diseños a medida de las propiedades de no aparecer en los Atributos del Inspector, ¿verdad? Pero cuando el Interface Builder intenta aplicar estos atributos a la vista, se vuelve a pensar en la opinión de la clase de «UIView» y no se pueden aplicar los atributos.

Alguna ayuda? Por favor, hágamelo saber si he omitido algún detalle importante, pero para lo que vale, He seguido este tutorial exactamente (aparte de ObjC vs Swift). También vale la pena señalar que he seguido este tutorial exactamente en otra máquina y se trabajó como un encanto (me la intención de hacer este post de anoche, pero el equipo estaba en entonces no tienen este problema).


Basado en los comentarios, ha sido sugieren que tal vez la .m archivo no está incluido y que podría estar causando el problema. Pensé que seguramente me hubiera ido fuera de mi camino para que este escenario sea el caso, pero he comprobado que de todos modos.

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

Cuando empecé a intentar hacer esto, yo estaba bajo el entendimiento de que la IB_DESIGNABLE clases tenía que ser parte de una diferente UIKit marco. Así que a partir de esta primera captura de pantalla, se puede ver que puedo configurar una «CustomViews» marco, que tiene una clase, CustomView. También verá aquí que también he creado un OtherView, que es idéntica a CustomView, excepto que no en un marco independiente. Idéntico problema persiste en el guión entre ambas clases sin embargo.

Aquí tenemos una captura de pantalla que indica que CustomView.m se incluye a ser construido con el CustomViews marco:

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

Mientras tanto, la captura de pantalla siguiente se indica varias cosas:

  • CustomViews.framework está debidamente incluida en el proyecto principal.
  • OtherView.m se incluye también como una compilación de origen, por lo que incluso si algo está mal con CustomView, OtherView debería funcionar, sin embargo genera idénticos errores.
  • Main.storyboard y LaunchScreen.xib se muestran de color rojo. No tengo idea de por qué, y no tiene la más mínima idea de por qué LaunchScreen.xib debe (no he tocado este archivo), aunque puedo decir que después de mirar en otros proyectos, Main.storyboard también se muestra en rojo para los proyectos, y no estoy haciendo nada con IB_DESIGNABLE o IBInspectable allí.

IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza


Que he probado y he reintentado varias veces ahora. Funciona todo el tiempo en mi computadora en casa-no puedo reproducir el problema descrito en esta pregunta como en casa. En el trabajo, nunca funciona. El problema que se describe en esta pregunta, sucede todo el tiempo.

Ambos equipos Mac Minis comprado nuevo de este año (no los nuevos modelos, a finales de 2012 el modelo). Ambos equipos están ejecutando OS X Yosemite 10.10. Ambos equipos están ejecutando Versión de Xcode 6.1. En casa, la construcción (6A1052d). Esta mañana, puedo confirmar que ambos equipos están ejecutando idénticas versiones de Xcode.

Otros han sugerido que esto podría ser una mala memoria RAM. Que parece descabellada para mí. He reiniciado el proyecto varias veces, reinicie el equipo varias veces. Me parece que si hubo mala memoria RAM en un equipo de aproximadamente 6 meses de edad, que iba a estar viendo otros problemas, y que este problema iba a ser menos consistente. Pero este mismo problema persiste a pesar de las numerosas veces que reiniciar todo el proyecto desde cero y completo se reinicia el equipo.


Cabe la pena señalar que si realmente compilar y ejecutar este proyecto, la vista personalizada con el IBInspectable propiedades que realmente se muestra como espero que el guión gráfico para mostrar. Me imagino que este sería el caso, incluso con la IB_DESIGNABLE y IBInspectable directivas sin embargo, ya que estos son creados como Definido por el Usuario de tiempo de ejecución de los Atributos.

  • Bueno, era sólo una idea. He quitado CustomView.m de la meta y, a continuación, recibió advertencias similares cuando se ejecuta la aplicación.
  • Que parece como un verdadero gremlin dado su comparación con un aparentemente idénticas de la máquina (que difiere de alguna manera). Has probado a publicar a devforums? Parece que te estás volando a ciegas, sin información adicional, y el proceso parece razonable y racional. La «construcción» de advertencia puede no significar demasiado, ya que Xcode está plagada de engañosos mensajes de error. Para patadas a pesar de que, de haber intentado Editor->»la depuración activada la vista», ¿verdad? (Probablemente no trabajo, pero vale la pena una comprobación de validez). Además, ¿hay algo que se muestran en el (registro) aplicación de Consola?
  • Estoy teniendo el mismo problema. Minas con una sola xib archivo que contiene una IB_DESIGNABLE. Sin embargo, la comprobación de mi configuración, ya tengo el automático refrescante y ahora he intentado manual se actualiza, la limpieza de los datos derivados de la primera, etc. Hasta ahora nada de nada ha funcionado. Lo extraño es que he tenido este control funciona bien, luego se detuvo. Y creo que no he cambiado ningún código en el medio. Loco.
  • Estaba mostrando advertencias como por encima. Ahora han creado una segunda clase con el código copiado del original IB diseños a medida. Esta clase funciona perfectamente y cuando me cambié de nuevo a la original, no de la clase obrera, ahora funciona bien. A partir de esto he llegado a la conclusión de que hay algo de caché en algún lugar (no en datos derivados) que no se borra hasta que el ib original con diseños que se intercambia por otra ib diseños a medida. El cambio a una UIView no parece claro esta caché. Sólo otra ib diseños a medida. Vaya a saber 🙂
InformationsquelleAutor nhgrif | 2014-10-31

11 Comentarios

  1. 73

    Basado en chrisco sugerencia para depurar la vista seleccionada (que yo ya había hecho, pero que iba a intentar de nuevo para una buena medida), me di cuenta de un par de otras opciones en la parte inferior del Editor de menú.

    • Actualización Automática De Vistas
    • La Actualización De Todos Los Puntos De Vista

    Hice clic en «Actualizar Todos los puntos de vista» y después de Xcode tenido un poco de pensar, de repente, el guión estaba mostrando mi punto de vista como se esperaba (aplicar correctamente mi IBInspectable propiedades).

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    Que luego pasó a través de todo el proceso de nuevo para confirmar que esta es la solución.

    He creado una nueva clase, ThirdView. Esta clase es idéntico al de los demás, de nuevo. He cambiado mi punto de vista de la clase a ThirdView y consiguió algo un poco diferente esta vez:

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    Clic en «Mostrar» para mí, las advertencias:

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    Uno nuevo esta vez:

    El uso de la clase UIView para el objeto con la clase personalizada porque la clase ThirdView no existe.

    Esto no es en realidad mucho más útil de lo que ya existía. Además, ahora los otros tres advertencias se han duplicado en 6 extrañamente.

    De todos modos, si hago clic en «Actualizar Todos los puntos de vista» desde el Editor de menú desplegable de nuevo, todos los errores desaparecen, y una vez más, la vista se muestra correctamente.

    Todavía, hasta este punto, todo lo que yo hice fue cosas que nunca metido en casa. En casa, sólo funcionaba. Así que me volví en «Actualizar Automáticamente puntos de vista» y crea un «FourthView» probar, una vez más, idénticos a los tres primeros.

    Después de cambiar el punto de vista de la clase a «FourthView» el designables etiqueta decía «Actualización» por un breve momento, finalmente, dijo: «Hasta la fecha»:

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    Así, he comprobado mi ordenador en casa. «Actualización automática de puntos de vista» está activado en el equipo que siempre estaba trabajando. Fue desactivada en el equipo que no lo era. Yo no recuerdo nunca toque esta opción de menú. Ni siquiera puedo decir con certeza si existió antes de Xcode 6. Pero esta opción es lo que estaba haciendo la diferencia.


    TL;DR, si tienes el mismo problema que se describe en la pregunta, asegúrese de que «Actualización Automática de puntos de vista» está activada (o manualmente «Actualizar Todos los puntos de vista» cuando se necesita una actualización en IB):

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    • En realidad estaba buscando la manera de desactivarlo, ya que mantiene la representación en el fondo, de mayores MacBooks muy lento. Gracias!
    • Esto puede resolver temporal, pero verifique la respuesta de @Martin-Gilles Lavoie
  2. 22

    Sólo una sugerencia para alguien más tiene este problema: recuerde que debe especificar el tipo de la variable.

    //Doesn't show up in IB
    @IBInspectable var includeLeftSection = true
    
    //Shows now that it knows the type
    @IBInspectable var includeLeftSection : Bool = true
    • Gracias, funciona ahora!
    • esto funcionó para mí también.
  3. 20

    Tengo un par de detalles más que puede causar que su IBDesignable clases a no ser cargado.

    Seleccione su problemática guión gráfico/xib donde sus vistas personalizadas deben mostrar.

    En la zona del navegador de cabeza para el Informe Navigator en su XCode espacio de trabajo/proyecto.

    En el menú del Editor de XCode, el éxito (como se ha mencionado por nhgrif), la «Actualización de Todos los puntos de vista de la» opción. Esto hará que IB a lanzar una compilación de un montón de cosas que, estoy seguro, no sería de esperar.

    En el Informe Navigator, haga Clic en «Grupo» para filtrar el contenido y la mirada en la «Interfaz» de la sección. Usted verá que para el bien de la carga de la costumbre IBDesignable vistas marco, se compilará un MONTÓN de cosas. Si cualquier de estos objetivos NO compila, tales como (quizás en desuso) de la unidad de objetivos de prueba (incluso si son totalmente ajenos a el código que se carga de estos puntos de vista o guión gráfico), a continuación, IB, se producirá un error en la carga de la dll.

    En mi caso, IB intentado compilar 8 objetivos, incluyendo 4 que donde la unidad de pruebas que no habían sido actualizados desde los últimos refactorización cambios que hemos estado trabajando.

    La mayoría de los cambios de código y correcciones que he hecho en el orden del IB para cargar adecuadamente y mostrar mis costumbres de vista, si no relacionadas o vinculadas en contra de estas clases, ni es siempre la carga de la historieta en el curso de la ejecución de estas pruebas unitarias. Sin embargo, IB tienen una dependencia en todo el área de trabajo de la compilación para que funcione.

    • Hey, entonces, ¿cómo hago para dejar de IB tratando de carga y visualización de puntos de vista no relacionados o vinculados a estas clases?
    • Supongo que tiene que ver con el encabezado de las dependencias. Si el diseño de las clases están tocando a otras clases, en el momento en el encabezado se ve que va a construir los relacionados con las implementaciones. Apple está jugando con la fuente de gráfico de dependencia código en XC7GM que absolutamente falla en nuestro proyecto con XCode estrellarse cuando es la construcción de la gráfica. El siguiente 7.1 betas no presentan el problema. Nuestra generación automática del sistema es todavía depende de 6.4 por el momento así que no hemos investigado la manera de resolver este más bajo XC6.4. Vamos a estar saltando directamente a 7.1 GM.
    • Si tienes varios objetivos / proyectos, a continuación, esta es absolutamente la respuesta correcta y realmente solucionar el problema, TODOS los objetivos deben construir de manera limpia, yo ni siquiera sabía que había un «Constructor de interfaces» en la sección del informe navigator! Todas las otras respuestas que he visto son, básicamente, una gran cantidad de mano que se agita para que pueda solucionar temporalmente, pero esta es la solución definitiva. Bien hecho.
    • Así, de acuerdo a esto, podemos concluir que IB_DESIGNABLE atributo es una mierda total y pérdida de tiempo. Sólo evitar su uso.
    • IB_DESIGNABLE no tiene nada que ver con el problema y la solución mencionadas anteriormente. Es simplemente un NO-OP de la bandera de IB a punto utilizable cosas. Sólo se necesita para mantener una casa limpia.
  4. 6

    Tuve la misma advertencia Ignoring user defined runtime attribute for key path .. aunque estoy absolutamente seguro de que no hizo nada malo con mi costumbre IBDesignable de vista de clase.

    Resultó, en mi caso, tiene que ver con Xcode caché.

    rm -rf ~/Library/Developer/Xcode/DerivedData/*

    Purga DerivedData y la advertencia se ha ido.

    • Acceso directo en XCode para lograr el mismo resultado: ⌘⇧K
    • Creo generación Limpia es diferente de la purga DerivedData carpeta. Por supuesto, en algún momento de generación limpia es lo suficientemente buena para resolver ciertos Xcode problemas de caché.
    • Gran. Este es trabajado.
    • usted probablemente significaba ⌘⌥⇧K (cmd+alt+mayús+K)
  5. 5

    Caso de alguien choca contra el error IB Designables clase no existe, por la misma razón que yo. Respuesta no era mi problema… pero aquí es un poco problema relacionado con el…

    Hay una propiedad oculta en la historia de la junta de código fuente llamado customModule.

    Por ejemplo, yo tenía una clase llamada ForwardArrow dentro de un marco independiente de que accidentalmente, he añadido a mi principal objetivo.

    Por lo que el XML para algunos puntos de vista, terminó como
    customClass=»ForwardArrow» customModule=»MainTargetNameWasHere»

    Cuando me he quitado de ellos, el objetivo principal en la construcción de la historia de la junta de no actualizar MainTargetNameWasHere a CustomViews que es el marco donde se encuentra y empieza a dar de que ninguna clase se encuentra el error.

    Así TLDR; asegúrese de que si su IBDesignable está en otro marco que la customModule atributo xml en su historia de la junta se establece en el valor correcto. Y si no hay en todo agregarlo.

    Ejemplo de mi fuente:

    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MUG-jc-2Ml" customClass="ForwardArrow" customModule="CustomViews">
    • Holy crap, esta ha sido la conducción me frutos secos por un día. Lo que es un poco desagradable error.
  6. 5

    Como mi ejemplo, yo estaba usando CheckboxButton a través de la vaina y de los gráficos de la casilla de verificación nunca se muestra en el guión mientras tengo los mismos problemas descritos en la pregunta aquí:

    advertencia: IB Designables: el Uso de la clase UIView para el objeto con la clase personalizada porque la clase CheckboxButton no existe

    y

    advertencia: IB Designables: Ignorando definido por el usuario en tiempo de ejecución atributo de ruta de la clave «checkColor» en la instancia de «UIView». Golpear una excepción al intentar establecer su valor: [ setValue:forUndefinedKey:]: esta clase no es el valor de la clave de codificación compatible con la tecla de checkColor.

    La manera de resolver mi problema era el de suministrar el módulo con el nombre CheckboxButton de la siguiente manera:

    IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    Nota: usted debe reemplazar CheckboxButton para cualquiera que sea el nombre del módulo que se esté utilizando.

  7. 4

    Yo personalmente resuelto este problema mediante el botón «-» para eliminar el contenido de mi identidad inspector. Cuando se retire de clases personalizadas, cambiar el contenido de la IB y, a continuación, agregue una nueva clase personalizada, el diseño de los elementos de la identidad inspector no se quitan y me hizo tener ese error. Acaba de Borrar todo y volver a generar. IB_DESIGNABLE, IBInspectable — Interface builder no se actualiza

    • Hice exactamente lo que usted dijo y se solucionó mi problema. Todas las soluciones anteriores expuestos aquí no lo hacen. Muchas gracias. ;o)
    • a veces las respuestas que nadie ve que lo soluciona, eh? 🙂
    • Tuve un problema que me cambia el nombre a una IBInspectable de la propiedad en algunos de mis xib del. Después de hacer eso yo tenía un montón de advertencias que me informa que XCode no se pudo encontrar el ahora con el nombre de la propiedad. La eliminación de la propiedad a partir de la identidad del inspector solucionado mi problema.
  8. 1

    Sé que esto es la respuesta, pero aquí es una experiencia más.

    Yo estaba teniendo algunos problemas ajenos a este problema, pero en el proceso me quitan @IBInspectable de los vars en mi clase y se eliminan los atributos de la identidad inspector (alt-manzana-3).

    Después de la fijación de la (código) problema con el componente, me actualiza todo lo que un montón de veces, pero aún no hay atributos de la identidad del inspector.

    Eventualmente, me di cuenta de que ellos estaban de vuelta, pero sólo en los atributos del inspector de alt-manzana-4). Tan pronto como valores añadidos a ellos no, ellos re-apareció en la identidad del inspector de

  9. 1

    Dave Thomas respuesta de arriba me dio la (inversa) de la solución cuando no de los otros (Derivados de Datos, Editor > Actualización) hizo, pero por el bien de la claridad en el caso de personas que no sabe de dónde para editar el XML… no es necesario!

    1. En su archivo de guión gráfico seleccione la problemática de vista
    2. En el lado derecho de la barra lateral, seleccione la Identidad del Inspector de ficha (3ª opción de la izquierda).
    3. Tendrás tu clase personalizada, que ya debe ser conjunto, y la Module. Para mí, esta estaba vacía, y me estaba poniendo los mismos errores OP. Me puse el Module a mi nombre del proyecto y BAM – se comenzó a trabajar después de la reconstrucción!
  10. 0

    Que me acaba de pasar a través del timbre en este problema. He intentado de todas las cosas mencionadas aquí y en otros lugares, sin suerte alguna. Este es un guión gráfico que trabajó muy bien para siempre y de repente dejó de funcionar con el «Ignorando definidos por el usuario en tiempo de ejecución atributo…» el problema.

    Por el motivo que sea, la eliminación de este código de uno de mis IBDesignable fijo es:

    -(void)viewDidLoad {
        self.clipsToBounds = YES;
    }

    la eliminación de este causados todas las advertencias en desaparecer, incluso en otros IBDesignable objetos. No tengo idea de por qué este paso fijo, pero tal vez pueda ayudar a alguien más.

    • te falta llamar a cenar aquí
  11. 0

    Yo estaba teniendo el mismo problema y he tenido que cambiar el cornerRadius y BorderWidth a ser una Cadena de texto y, a continuación, echó a CGFloat, era la única solución para mí ser capaz de cambiar los valores y ver los cambios en el interface builder.

    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor!.CGColor
        }
    }
    
    @IBInspectable var borderWidth: String? {
        didSet {
            layer.borderWidth = CGFloat(Int(borderWidth!) ?? 0)
        }
    }
    
    @IBInspectable var cornerRadius: String? {
        didSet {
            layer.cornerRadius = CGFloat(Int(cornerRadius!) ?? 0)
            layer.masksToBounds = layer.cornerRadius > 0
        }
    }
    • Creo que IBInspectable sólo pueden hacer ciertos tipos, así que tal vez hubiera sido necesario el uso de Float en lugar de CGFloat y lanzar ese lugar

Dejar respuesta

Please enter your comment!
Please enter your name here