cocoa core-data cocoa-bindings nsmanagedobject

cocoa - "[Something copyWithZone:]: selector no reconocido enviado a la instancia" cuando se utilizan enlaces/datos principales



core-data cocoa-bindings (8)

(preguntándome y respondiendo a mí mismo porque pasé horas en la web buscando esto, y la mayoría de los recursos dicen "lo resolví al final" sin dar una explicación)

Tenía una aplicación muy simple de Core Data + Bindings:

  • Un NSArrayController sacando elementos de Core Data
  • Un NSTableView representándolos
  • Otro NSTableView que al hacer clic en una fila en la primera tabla, muestra los detalles de ese elemento

El artículo 3 anterior causaba la falla de la aplicación, con el error:

[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance

Implementando ese método (!) Y poniendo un punto de quiebre allí, descubrí que estaba siendo invocado por la clase NSCell de Apple; esto no ayudó mucho :(.


Accidentalmente enfrentado con este problema.

Después de una pequeña investigación, descubrí que la razón era una opción de enlace de cacao incorrecta establecida en el objeto NSTextField .

El problema se solucionó desactivando el encuadernado.


Como una pista para evitar cualquier tipo de problema con el enlace, se puede convertir el NSManagedObject en NSDictionary mientras se completan los controladores con: [object dictionaryWithValuesForKeys:[[object entity] attributeKeys]] , es mucho más fácil conectarse y depurar :-)

Gracias por el puntero, por cierto!


Encontré este error cuando traté de implementar un enlace maestro-detalle. Algo análogo al Departamento / Empleado. Intenté vincular un arrayController a "selection.employees" del Departamento y obtuve:

- [Empleado copyWithZone:]: selector no reconocido enviado a la instancia

Resultó que la relación de los empleados no estaba establecida en muchos, como se esperaba, sino en uno. Una vez que corregí esto, todo estaba bien.


Gracias por esta solución, me dirigió en la dirección correcta. Para aquellos de ustedes que están aprendiendo InterfaceBuilder espero que esta información adicional les ayude.

Al construir un tutorial, ArrayController.ObjectValue involuntariamente una Text field Cell - Text Cell a mi ArrayController.ObjectValue .
Se suponía que el enlace real sucedería en

Table Column > Table Cell View > Static Text - Table View Cell

Ese fue correcto, pero visualmente en el árbol debajo de él (por razones que aún no entiendo, IB necesita una Text Field Cell ). También había vinculado:

Table Column > Text Field Cell - Text Cell

Fue ese segundo enlace que al tratar de copiar el objeto completo porque la ruta era objectValue sin clave, estaba desencadenando este error.

Probablemente fue un error de principiante, pero significó caminar a través de CADA objeto y buscar enlaces y me encontré con este.


Resulta que TODO lo anterior es necesario para activar esto, y XCode le permite hacer algo que está mal en el 99.9% de las situaciones, sino en el 100%.

  1. Los objetos Core-Data no pueden implementar copyWithZone: - esto causa el bloqueo

  2. Cuando una tabla vista se rellena con enlaces, intenta copiar los valores de los objetos en NSArrayController para representar cada columna

  3. ... pero si no especifica el enlace de Columna por completo (Xcode le permite especificarlo a medias), entonces tableview intenta la "copia" en los objetos en lugar de sus valores

El error en mis enlaces: había especificado que una columna de tabla tenía un "valor" con:

Controlador Key = "arrangedObjects" Model Key Path = (en blanco)

(Esto es un error en autocompletar XCode4 - borrará el campo ModelKeyPath a veces cuando tabula demasiado rápido)

Termine de escribir el enlace, por ejemplo:

Modelo Key Path = "valor"

... y todo funciona de nuevo.


También me gustaría publicar aquí porque tuve un problema similar con el mismo tipo de cosas

objeto definido vacío:

Codigo erroneo:

@property (nonatomic, copy, readwrite) MSender * sender;

esto debería resolver un error de compilación porque con el recuento de referencias Xcode no tiene idea de cómo copiar mi objeto. En cambio, falla en tiempo de ejecución ...

Escribir código:

@property (nonatomic, strong, readwrite) MSender * sender;

Espero que ayude a alguien.


También tuve un problema similar y procedía de llamar a un ProxyObject en lugar de llamar al objeto real desde un controlador de array.

Por ejemplo:

MYEntity *entity = EntityController.selection; NSString *property = entity.property; // <--- causes the error

pero

MYEntity *entity = EntityController.selectedObjects firstObject]; // <--- fixes the error NSString *property = entity.property;


NSTableViewDataSource esto cuando devolvió una vista desde la función -tableView:objectValueForTableColumn:row: En cambio, se supone que devuelve un valor (por ejemplo, NSString* ). (No es sorprendente dado su nombre, pero el error no es útil para descubrir esto. La función en la que estaba pensando es -tableView:viewForTableColumn:row: en NSTableViewDelegate ).