2011-09-15 8 views
17

Dal Core Data Programming Guide (il corsivo è mio):Quali sono i metodi di accesso "primitivi" per i dati principali?

Per impostazione predefinita, Core Data crea dinamicamente efficiente pubblico e primitiva get e set metodi di accesso per gli oggetti modellati (attributi e relazioni) delle classi di oggetti gestiti.

Anche se sono stato con Core Data e mogenerator felicemente da quando ho iniziato a Objective-C, non ho mai avuto uno sguardo a ciò che questo significa, fino a quando un app inviata ottenuto respinto a causa di presunto utilizzo di API private . Lunga storia su un metodo generato setPrimitiveTypeValue:, ma non di ciò che riguarda la mia domanda.

Mentre leggevo la guida, mi sono imbattuto nell'idea di accessori pubblici e primitivi per gli attributi di entità. Un'altra citazione, ma, più in basso:

Ad esempio, dato un'entità con un attributo firstName, Core Data genera automaticamente firstName, setFirstName:, primitiveFirstName e setPrimitiveFirstName:.

A cosa servono le funzioni di accesso primitive? È solo così puoi assegnare direttamente un valore BOOL, senza doverlo racchiudere in un NSNumber? In tal caso, perché il mogenerator ha avuto il problema di generare tutti i tipi di accessori <Attribute>Value, set<Attribute>Value:, primitive<Attribute>Value, setPrimitive<Attribute>Value:?

Sono confuso, chi può darmi una mano?


domande correlate:

+0

Qualcun altro [ha risposto a questo già] [1] con quello che sembra una buona risposta. [1]: http://stackoverflow.com/questions/5509106/why-would-i-need-to-use-a-primitive-accessor-methods-in-a-core-data- progetto – Simon

risposta

10

Per quanto mi risulta, il metodo primitivo fa l'attuale recupero o l'impostazione , ma non rilascia alcuna notifica KVC o KVO ('willAccessValueForKey' e così via). Il metodo pubblico chiama il metodo primitivo, ma avvolge la chiamata nelle chiamate KVO. Quindi, dall'esterno dell'oggetto, in genere si chiamano i metodi pubblici, ma se è necessario utilizzare le proprietà dell'oggetto per motivi interni (per convalidare o derivare qualche altra proprietà, ad esempio) si useranno i metodi primitivi per evitare l'attivazione tutte le notifiche.

sarei il benvenuto qualche correzione o chiarimenti sulla risposta in quanto è un soggetto Sono interessato a ma non completamente esperto in.

+0

Risposta straordinaria @jrturton. Basta aggiungere questo link come riferimento se le persone vogliono dare una rapida occhiata a [Custom Primitive Accessor Methods] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html # // apple_ref/doc/uid/TP40002154-SW5) nel documento Dati principali che esegue il backup della risposta. – Mick

+1

@Patt wow questa deve essere stata una delle mie prime risposte SO! Esplosione dal passato ... – jrturton

+0

@Mick che il link è ora obsoleto. – ThomasW

0

@ risposta coperto questioni di jrturton riguardanti personalizzato attributi e a-uno Metodi di accesso, in cui l'accesso pubblico è semplice.

Inoltre, per supportare pienamente a-molti funzioni d'accesso, in un'implementazione personalizzata, pubbliche di accesso possono avere chiamare primitive-accessors in combinazione con metodi NSMutableSet (unionSet: e minusSet :), che deve essere avvolto all'interno Coppie metodo KVO (farà ... ha fatto ...).

Problemi correlati