tipos quimicos polar metalico iónico ionico enlaces enlace ejemplos diferencias covalente cocoa nscollectionview nscollectionviewitem

quimicos - Cocoa: ¿Dónde está el enlace entre un NSCollectionView y un NSCollectionViewItem? Xcode 6 Bug?



enlaces quimicos (8)

Bueno, probé la solución de @ RubberDuck pero no funcionó (ver mi comentario ). Lo que me funcionó es configurar collectionView.itemPrototype en viewDidLoad del controlador de vista (Xcode 6.1):

@IBOutlet weak var collectionView: NSCollectionView! override func viewDidLoad() { // don''t forget to set identifier of CollectionViewItem // from interface builder let itemPrototype = self.storyboard?.instantiateControllerWithIdentifier("collectionViewItem") as NSCollectionViewItem self.collectionView.itemPrototype = itemPrototype }

Cuando arrastra un NSCollectionView a una vista, aparece un NSCollectionViewItem en el guión gráfico, flotando alrededor.

Imagina que arrastro varios NScollectionViews a la misma vista. Tendré un montón de NSCollectionViewItems. ¿Cómo sabe una vista de colección qué NScollectionViewItem le pertenece? ¿Hay una conexión entre los dos que se pueden ver en el constructor de interfaces? ¿No veo nada en el constructor de interfaces? ¿Dónde puedo ver eso?

EDITAR: Aparentemente esto parece ser un error de Xcode. Cuando agrega un NSCollectionView al guión gráfico, aparece sin un enlace al NSCollectionViewItem y parece imposible conectar el elemento de salida de prototipo entre ellos.

Después de ponerse en contacto con Apple sobre este tipo de errores, su respuesta fue: "este es un problema conocido con Storyboards en OS X. Use Xibs en su lugar".


Caigo en el mismo programa, de todos modos, desde 10.11 Apple Documents dice:

"También debe desconectar y descartar el" itemPrototype "de NSCollectionView, que es un vestigio del modelo de API 10.10 y anteriores."

desde: https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/#10_11CollectionView

Aquí se explica cómo funciona ahora.

Así que debemos usar el viejo amado XIBS:

NSCollectionViewItem *item = [collectionView makeItemWithIdentifier:@"Thing" forIndexPath:indexPath];


El NSCollectionView tiene un itemPrototype salida que está conectado a su NSCollectionViewItem específico. Puede ver esto en el inspector de conexiones para cualquier objeto.


El tipo de truco parece ser que no puedes usar un ViewController normal de la colección de objetos en Xcode cuando usas Storyboards.

Lo que funciona para mí es arrastrar un elemento de vista de colección desde la lista Objetos y establecer su clase en su clase personalizada, luego cablear todas las conexiones como lo haría normalmente para crear IBOutlets.

Luego, debe crear una instancia de la vista en lugar de makeView, pero de esta manera le permite utilizar varias vistas en la misma colección sin registrar nada especial.


La respuesta seleccionada necesita más información:

Si realiza el enlace desde el contenido de collectionView a los controladores de matriz organizados utilizando los enlaces de Interface Builder, generará un error: "El prototipo del elemento NSCollectionView no debe ser nulo".

Esto se debe a que los enlaces se realizan antes de que se asigne itemPrototype. En su lugar, realice enlaces con código después de la asignación itemPrototype.

@IBOutlet weak var collectionView: NSCollectionView! @IBOutlet var arrayController: NSArrayController! let itemPrototype = self.storyboard?.instantiateControllerWithIdentifier("collectionViewItem") as NSCollectionViewItem self.collectionView.itemPrototype = itemPrototype collectionView.bind("content", toObject: arrayController, withKeyPath: "arrangedObjects", options: nil)


Sí, después de horas de lucha confirmo este uno más de los errores de Xcode.

La única solución es editar el archivo Main.storyboard y agregar esta línea al final de la sección CollectionView, justo antes de </collectionView> :

<connections> <outlet property="itemPrototype" destination="XXXXXXX" id="Kaa-2J-b4e"/> </connections>

donde XXXXXX es el id o el CollectionViewItem. El otro número y usted pueden conservar el que publico, a menos que su proyecto ya use esta ID, pero las posibilidades de que esto ocurra son muy escasas.


Tampoco conseguí que la respuesta aceptada de @mostruash funcionara en Objective-C, pero se me ocurrió otra solución. Utilice un configurador personalizado para la propiedad collectionView IBOutlet:

- (void)setCollectionView:(NSCollectionView *)collectionView { NSCollectionViewItem *itemPrototype = [self.storyboard instantiateControllerWithIdentifier:@"collection_item"]; collectionView.itemPrototype = itemPrototype; _collectionView = collectionView; }


Vaya a la biblioteca de objetos (en la parte inferior derecha de Xcode) y busque "Objeto". Es "Proporciona una instancia de una subclase NSObject que no está disponible en Interface Builder". Arrástrelo y suéltelo en el guión gráfico, en la barra superior de ViewController (o alternativamente debajo de ViewController en la vista de árbol en el LHS). Luego, haga clic en ese objeto y en el "Inspector de identidad" establezca su clase como su clase ViewItem. Luego puede presionar ctrl + arrastrar desde la Vista de Colección al Objeto, y le permitirá conectarlo como "itemPrototype".