objective-c xcode swift interface-builder ibdesignable

objective c - Error al procesar la instancia de IB Designables



objective-c xcode (11)

Tengo un marco dinámico mixto Objective-C y Swift. Y el marco mixto se vinculó con dos marcos dinámicos de Objective-C puros.

Cuando traté de marcar cualquier clase en el marco mixto con IB Designable y usar esa clase en el guión gráfico o en el plumín, el Xcode siempre dice que la instancia no se pudo procesar.

Y estaba el mensaje de error:

Designables de IB: Error al procesar la instancia de WZUITokenField: dlopen (WZUIKit.framework, 1): Biblioteca no cargada: /Library/Frameworks/WZFoundation.framework/WZFoundation Referenciada de: WZUIKit.framework Motivo: no se encontró la imagen

Designables de IB: no se pudo actualizar el estado del diseño automático: dlopen (WZUIKit.framework, 1): Biblioteca no cargada: @ rpath / WZFoundation.framework / WZFoundation Referenciada de: WZUIKit.framework Motivo: no se encontró la imagen

El marco WZUIKit es un marco mixto Objective-C y Swift y la WZFoundation es pura Objective-C.

Además, todas estas cosas funcionan tanto en el dispositivo como en el simulador.


Acabo de descubrir otra razón en mi caso:

Cuando utilicé ''Editor -> Depurar vistas seleccionadas'' vi que se bloqueó, porque estaba usando CoreGraphics para crear una imagen y usarla como imagen de fondo para un botón:

class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { let rect = CGRectMake(0.0, 0.0, size.width, size.height); UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0); let context = UIGraphicsGetCurrentContext(); // It''s alraedy nil here :( CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillRect(context, rect); let image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

La razón es simplemente que el tamaño es (0.0, 0.0). ¿Porqué es eso? Estoy llamando

super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)

¡Pero en IB self.bounds.size todavía es 0 en este momento! Así que cambié una línea:

let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));

Y ahora funciona :)

Apple debería proporcionar una lista con qué hacer y qué no hacer con respecto al IB ...


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

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

Pero parece que se suponía que no debía usar Main Bundle, sino el paquete de la clase. Así que reemplacé ese código por lo 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.


Finalmente, resolví este problema agregando $(CONFIGURATION_BUILD_DIR) en el campo '' Runpath Search Paths de Runpath Search Paths configuración de Runpath Search Paths ''.

Además, hay algunos pasos adicionales que podría necesitar hacer con su Xcode.

  1. Borre los datos derivados de Xcode para el proyecto. Están en ~/Library/Developer/Xcode/DerivedData
  2. Limpie su compilación actual presionando K
  3. Construye tu proyecto
  4. En el guión gráfico, vaya al menú Editor y Refresh All Views ; espere a que se complete la construcción y los errores desaparecerán

Crédito a @Mojtaba


Interesante.

Primero, la respuesta de WeZZard me hizo avanzar en la dirección correcta, pero no fue exactamente mi solución.

En mi proyecto de iOS, algo había anulado el campo Runpath Search Paths en mi destino. Se veía así:

LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";

Intenté su solución de agregar $(CONFIGURATION_BUILD_DIR) pero no funcionó para mí. Como no funcionaba, por costumbre, simplemente eliminé la entrada de configuración (volviendo a los valores predeterminados del proyecto). Cuando lo hice, restableció a esto:

LD_RUNPATH_SEARCH_PATHS = $(inherited) ''@executable_path/Frameworks'' ''@loader_path/Frameworks''

que si busco en mis archivos xcconfig, parece provenir de los Cocoapods.

Parece que Alex es el @loader_path clave, pero es una ruta ligeramente diferente en iOS que Mac OS X.


Llegué a este error en un marco que contiene IBDesignables.

Tuve que agregar $(FRAMEWORK_SEARCH_PATHS) a la configuración LD_RUNPATH_SEARCH_PATHS en mi objetivo de infraestructura.

Después de actualizar la configuración de trazado de recorrido, construir y actualizar la vista en el guión gráfico, el error desapareció. Ni siquiera tuve que limpiar la carpeta de compilación.


Si tiene el mismo problema al crear una aplicación de Mac, al agregar @loader_path/../Frameworks a las Runpath Search Paths solucionó esto por mí.


Siga los pasos a continuación:

  1. Si hay conflictos en el guión gráfico, resuélvalos correctamente, verifique si el xml está validado correctamente. (Este es el paso principal).
  2. Limpia el proyecto.
  3. Eliminar la carpeta de datos derivados.
  4. Salga de Xcode y reinícielo nuevamente. (Tuve que hacer esto dos veces)

También experimenté esto en un proyecto Mac y Xcode 7.3.1. En mi caso, el marco al que se hace referencia en el mensaje de error Error al procesar no estaba relacionado con el dibujo.

El simple hecho de ir a la pestaña General / Linked Frameworks and Libraries del objetivo y cambiar el Estado del marco ofensivo de Obligatorio a Opcional permitió a los IBDesignables actualizar y dibujar correctamente en IB.

estado opcional


Tuve el mismo problema En Xcode 6.4, al agregar Membresía objetivo de prueba al guión gráfico, me corrigieron estos errores.

Además, mi objetivo de prueba tiene @loader_path/Frameworks establecido en Runpath Search Paths para el objetivo de prueba, y no en el objetivo original.


Tuve este problema en un proyecto de OS X.

En mi caso, el problema era un proyecto antiguo ( NMSSH ) que contenía un objetivo marco con configuraciones de compilación incorrecta. Específicamente:

  • INSTALL_PATH se estableció en @executable_path/../Frameworks , pero la configuración correcta es /Library/Frameworks
  • SKIP_INSTALL no se configuró y su valor predeterminado es NO , pero la configuración correcta es YES
  • DYLIB_INSTALL_NAME_BASE no se configuró, pero la configuración correcta es @rpath

Tenga en cuenta que todas las configuraciones correctas son las que obtiene automáticamente para un objetivo de infraestructura creado recientemente.

Después de cambiar la configuración a los valores correctos, Xcode pudo cargar mi vista @IBDesignable en el guión gráfico.


para mí funciona para cerrar xcode y volver a abrirlo de nuevo. Sin errores despues. Gracias.