ios - tutorial - ¿Por qué no puedo usar la "descripción" como un nombre de atributo para una entidad de Core Data?
swift 4 core data example (3)
Tengo una entidad simple de Core Data que tenía un atributo de cadena llamado "descripción". El programa se bloquea cuando golpea:
valueForKey:@"description"
Cambié el atributo "descripción" a "texto" y resolví el problema.
¿Por qué pasó esto?
¿Es "description" una palabra clave reservada en Core Data?
¿Está relacionado con llamar al método de descripción de NSObject?
¿Hay una referencia a estas palabras clave reservadas si existen?
Debido a que entra en conflicto con el método -description
en NSObject
(recuerde que Core Data genera dinámicamente NSObject
y mutadores de propiedades, una propiedad llamada "descripción" requeriría la creación de un método de -description
llamado -description
). Esto se documenta en la Guía de programación de datos básicos y en la Referencia de clase de NSPropertyDescription :
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 dar a una propiedad el nombre "descripción". Hay cientos de métodos en NSObject que pueden entrar en conflicto con los nombres de propiedades, y esta lista puede crecer sin previo aviso desde marcos u otras bibliotecas. Debe evitar las palabras muy generales (como "fuente" y "color") y las palabras o frases que se superponen con los paradigmas de Cocoa (como "isEditing" y "objectSpecifier").
Sospecho (aunque no estoy seguro) que el problema está en la generación de accesores en tiempo de ejecución de Core Data. Core Data sintetiza los accesores (y los definidores) para los atributos en tiempo de ejecución y los agrega a la clase apropiada (nuevamente, en tiempo de ejecución). Si Core Data crea un nuevo método de description
, anulando -[NSObject description]
y poniendo la lógica de transacción, etc. en el método, entonces cualquier código que llame -[NSObject description]
podría comportarse "mal".
description no es una palabra clave reservada en CoreData, pero es una propiedad de todos los objetos Objective-C de forma inherente. Es parte de la clase NSObject.