objective-c core-data mogenerator

objective c - ¿Para qué son los accesores ''primitivos'' en los Datos Core?



objective-c core-data (2)

De la Guía de Programación de Datos Básicos (mi énfasis):

De forma predeterminada, Core Data crea dinámicamente métodos públicos y primitivos de obtención y configuración de acceso para las propiedades modeladas (atributos y relaciones) de las clases de objetos gestionados.

Aunque he estado usando Core Data y mogenerator felizmente desde que empecé a usar Objective-C, nunca he mogenerator un vistazo a lo que esto significa, hasta que se rechazó el envío de una aplicación debido a un supuesto uso de API privada. Larga historia sobre un método setPrimitiveTypeValue: generado, pero no de qué trata mi pregunta.

Mientras leía la guía, me topé con la idea de accesores públicos y primitivos para los atributos de entidad. Otra cita, pero más abajo:

Por ejemplo, dada una entidad con un atributo firstName , Core Data genera automáticamente el primer nombre, setFirstName: primitiveFirstName y setPrimitiveFirstName:

¿Para qué son los accesores primitivos? ¿Es solo para que pueda asignar un valor BOOL directamente, sin envolverlo en un NSNumber? Si es así, ¿por qué mogenerador se había pasado la molestia de generar todo tipo de valor <Attribute>Value , set<Attribute>Value: primitive<Attribute>Value , setPrimitive<Attribute>Value: accessors?

Estoy confundido, ¿quién puede ayudarme?

Preguntas relacionadas:


La respuesta de @jrturton cubrió los problemas relacionados con los atributos personalizados y los métodos de acceso a la relación entre personas , donde el acceso público es sencillo.

Además, para ser totalmente compatible con To-Many Relationship Accessors, en la implementación personalizada, los accesores públicos pueden tener que llamar primitive-accessors en combinación con los métodos NSMutableSet (unionSet: and minusSet :), que deben incluirse dentro de los pares de métodos KVO (lo hará. ..hizo...).


Por lo que yo entiendo, el método primitivo hace la obtención y configuración reales, pero no emite ninguna notificación KVC o KVO (''willAccessValueForKey'' y así sucesivamente). El método público llama al método primitivo, pero envuelve la llamada en las llamadas KVO. Entonces, desde fuera del objeto, normalmente llamaría a los métodos públicos, pero si necesita usar las propiedades del objeto por razones internas (para validar o derivar alguna otra propiedad, por ejemplo), usaría los métodos primitivos para evitar el disparo. Todas las notificaciones.

Agradecería cualquier corrección o aclaración sobre la respuesta, ya que es un tema en el que estoy interesado pero que no estoy completamente versado.