2011-09-15 1749 views
17

Desde el Core Data Programming Guide (el subrayado es mío):¿Qué son los accesadores 'primitivos' en Core Data?

Por defecto, la base de datos crea dinámicamente eficiente pública y primitiva get y métodos de acceso establecidos para las propiedades de modelado (atributos y relaciones) de clases de objetos gestionados.

Aunque he estado usando datos básicos y mogenerator feliz desde que empecé en Objective-C, nunca he tenido un vistazo a lo que esto significa, hasta que fue rechazado un envío de aplicación debido a la presunta utilización de la API privada . Larga historia sobre un método setPrimitiveTypeValue: generado, pero no de qué se trata mi pregunta.

Mientras leía la guía tropecé con la idea de acceso público y primitivo para los atributos de la entidad. Otra cita, pero más abajo:

Por ejemplo, dada una entidad con un atributo firstName, Núcleo de datos genera automáticamente firstName, setFirstName:, primitiveFirstName y setPrimitiveFirstName:.

¿Cuáles son los accesorios primitivos para? ¿Es solo para que pueda asignar un valor BOOL directamente, sin envolverlo en un NSNumber? Si es así, ¿por qué Mogenerator se ha tomado la molestia de generar todo tipo de accesos <Attribute>Value, set<Attribute>Value:, primitive<Attribute>Value, setPrimitive<Attribute>Value:?

Estoy confundido, ¿quién me puede ayudar?


preguntas relacionadas:

+0

Alguien más [respondió esto ya] [1] con lo que parece una buena respuesta. [1]: http://stackoverflow.com/questions/5509106/why-would-i-need-to-use-a-primitive-accessor-methods-in-a-core-data- proyecto – Simon

Respuesta

10

Por lo que yo entiendo, el método primitivo hace el actual Obtención y establecimiento , pero no emite ninguna notificación KVC o KVO ('willAccessValueForKey', etc.). El método público llama al método primitivo, pero ajusta la llamada en las llamadas KVO. Por lo tanto, 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 disparar todas las notificaciones

daría la bienvenida a cualquier corrección o aclaraciones sobre la respuesta ya que es un tema que me interesa, pero no versado plenamente en.

+0

Awesome answer @jrturton. Solo agregue este enlace como referencia si la gente quiere echar un vistazo rápido a [Métodos de acceso primitivo personalizado] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html # // apple_ref/doc/uid/TP40002154-SW5) en el documento Core Data que realiza una copia de seguridad de su respuesta. – Mick

+1

@Patt ¡esta debe haber sido una de mis primeras respuestas de SO! Explosión del pasado ... – jrturton

+0

@Micha ese enlace ahora está obsoleto. – ThomasW

0

@ cuestiones de respuesta cubierta de jrturton respecto personalizada atributo y a-uno Métodos de acceso, donde el acceso público es sencillo.

Además, para apoyar plenamente A-Muchos Relación descriptores de acceso, en la implementación personalizada, públicas-descriptores de acceso puede tener que llamar primitivos-descriptores de acceso en combinación con métodos NSMutableSet (unionSet: :) y minusSet, que debe ser envuelto en el interior Pares de métodos KVO (lo harán ... lo hicieron ...).