2011-01-17 10 views
17

Tengo una entidad de Datos básicos simple que tenía un atributo de cadena llamado "descripción". El programa se bloquea cuando golpea:¿Por qué no puedo usar "descripción" como nombre de atributo para una entidad de Datos centrales?

valueForKey:@"description" 

me cambió el atributo "descripción" para "texto" y problema resuelto.

¿Por qué sucede esto?

¿La "descripción" es una palabra clave reservada en Core Data?

¿Está relacionado con llamar al método de descripción de NSObject?

¿Existe alguna referencia a estas palabras clave reservadas si existen?

Respuesta

23

porque entra en conflicto con el método -description en NSObject (recordemos que la base de datos genera dinámicamente acceso de propiedad y mutadores - una propiedad denominada ‘descripción’ requeriría la creación de un método de acceso llamado -description). Esto está documentado en el Core Data Programming Guide y la NSPropertyDescription Class Reference:

Tenga en cuenta que un nombre de propiedad no puede ser el mismo que cualquier nombre de método sin parámetros de NSObject o NSManagedObject. Por ejemplo, no puede darle a una propiedad el nombre "descripción". Hay cientos de métodos en NSObject que pueden entrar en conflicto con los nombres de las propiedades, y esta lista puede crecer sin previo aviso desde los marcos u otras bibliotecas. Debe evitar palabras muy generales (como "fuente" y "color") y palabras o frases que se superponen con los paradigmas Cocoa (como "isEditing" y "objectSpecifier").

4

descripción no es una palabra clave reservada en CoreData, pero es una propiedad inherentemente en todos los objetos de Objective-C. Es parte de la clase NSObject.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/description

+0

No es una propiedad (declarada) per se pero un nombre de método en su lugar. –

+0

La pregunta es por qué a los Datos Centrales no les gusta la clave @ "descripción" en un Objeto Administrado. NO: ¿Cuál es el método de "descripción"? – Aaronium112

0

sospecho (aunque no estoy positivo) que la cuestión es la generación de descriptor de acceso de tiempo de ejecución de datos básicos que está en cuestión. Core Data sintetiza accessors (y setters) para los atributos en tiempo de ejecución y agrega esos accessors a la clase apropiada (nuevamente, en tiempo de ejecución). Si Core Data crea un nuevo método description, anulando -[NSObject description] y colocando la lógica de transacción, etc. en el método, entonces cualquier código que llame a -[NSObject description] podría comportarse "mal".

Cuestiones relacionadas