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:
- Debe tener
AdvancedCellView
configurado como la Clase personalizada del propietario del archivo en el Inspector de identidad. - Verifique que el módulo también sea correcto; por lo general, solo lo quiere en blanco.
- 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.
- 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.
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.