ios swift uiview xib ibdesignable

ios - Error de instancia de vista de tiros de punta



swift uiview (4)

Intenté hacer la subclase UIBiew de @IBDesignable siguiendo este tutorial (de link ). La primera vista personalizada va bien. Pero cuando intento hacer otro, tengo errores. Primero no pude failed to update auto layout status: the agent crashed y no se Failed to render instance of ... De alguna manera, empecé a ser capaz de generar y ejecutar proyectos con estos errores, pero luego recibo un nuevo error: EXC_BAD_ACCESS ... en línea, let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView . Aquí está todo el método:

func loadViewFromNib() -> UIView { let bundle = NSBundle(forClass: self.dynamicType) let nib = UINib(nibName: "advancedCellView", bundle: bundle) let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView return view }

Con el primer UIView personalizado no hay problema. Yo uso el mismo código ..

¿Algunas ideas? Gracias


El método loadViewFromNib() que publica parece correcto, está obteniendo el paquete correctamente y especificando el nombre de la punta como un literal de cadena, por lo que debería encontrar la punta. Como alguien más comentó, es probable que haya algún problema con la configuración de la punta. Aquí hay algunas cosas para comprobar:

  1. Debe tener AdvancedCellView configurado como la Clase personalizada del propietario del archivo en el Inspector de identidad.
  2. Verifique que el módulo también sea correcto; por lo general, solo lo quiere en blanco.
  3. La Clase personalizada para la Vista no debe establecerse, simplemente déjela como la predeterminada (UIView). Si tiene un nombre más descriptivo que ''Ver'' en la barra lateral, es probable que esté mal.
  4. Compruebe que solo tiene un objeto de nivel superior en la punta. La barra lateral debería tener este aspecto, sin ninguna otra entrada, cuando haya colapsado el árbol de Vistas.

NB Esta respuesta está relacionada con el tutorial al que está vinculado el OP, y no es la única forma correcta de configurar una plumilla.


Estaba mirando el tutorial y descubrí que si subclasificaba el elemento Ver en su xib personalizado, obtendría el error. Asegúrese de que solo haya establecido el "Propietario del archivo" en su clase personalizada.


Intenta hacer esto en su lugar. Siempre me funciona:

let picker = NSBundle.mainBundle().loadNibNamed("advancedCellView", owner: nil, options: nil) let view = picker[0] as! UIView return view

Déjame saber si eso funciona


El método instantiateWithOwner(options:) devuelve una matriz, no una vista, por lo que una reducción forzada a UIView nunca funcionará. En su lugar, intente [AnyObject] tipo real, [AnyObject] .

Los elementos de la matriz corresponden a los objetos de nivel superior en el archivo nib, por lo que la vista que le interesa debe ser uno de los elementos de la matriz. Dado el nombre de su archivo de plumilla, lo más probable es que solo haya un objeto de nivel superior en la matriz: la celda que está intentando cargar. Asegúrese de que solo haya un objeto de nivel superior en el archivo de plumilla, y de que se UIView de una instancia de una subclase de UIView .

Tenga en cuenta que su implementación es potencialmente ineficiente. Si está cargando más de una celda, debe almacenar en caché la instancia de UINib lugar de crear una nueva cada vez. Tenga en cuenta que las clases de marco como UITableViewController tienen métodos integrados para registrar nibs que cuidan estos detalles automáticamente, por lo que es posible que no tenga que hacerlo usted mismo.