¿Por qué no puedo usar la "descripción" como nombre de atributo para una entidad de datos básicos?

Tengo una simple entidad de datos básicos que tenía un atributo de cadena llamado "descripción". El progtwig se bloquea cuando golpea:

valueForKey:@"description" 

Cambié el atributo "descripción" por "text" y resolví el problema.

¿Por qué pasó esto?

¿La "descripción" es una palabra key reservada en los datos básicos?

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

¿Hay alguna reference a estas palabras key reservadas si existen?

Debido a que entra en conflicto con el método -description en NSObject (recuerde que Core Data genera dinámicamente accessors y mutators de propiedad) una propiedad llamada 'description' requeriría crear un método accessor llamado -description . Esto está documentado en la Guía de progtwigción de datos básicos y la Referencia de class NSPropertyDescription :

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

La descripción no es una palabra key reservada en CoreData, pero es una propiedad inherente a todos los objects Objective-C. Es parte de la class NSObject.

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

Sospecho (aunque no estoy seguro) de que el problema es la generación de acceso de time de ejecución de Core Data que está en cuestión. Core Data sintetiza los accesores (y los establecedores) para los attributes en time de ejecución y agrega esos accesores a la class apropiada (nuevamente, en time de ejecución). Si Core Data crea un nuevo método de description , anular -[NSObject description] y poner la lógica de transacción, etc. en el método, entonces cualquier código que llame -[NSObject description] podría comportarse "mal".