2011-09-15 15 views
17

Z Core Data Programming Guide (podkreślenie moje):Jakie są "prymitywne" akcesory w danych podstawowych?

Domyślnie Rdzeń danych dynamicznie tworzy wydajny publicznego i prymitywny pobierania i ustawiania metody dostępowe dla modelowane właściwości (atrybutów i relacji) zarządzanych klas obiektów.

Chociaż byłem przy użyciu danych Core i mogenerator szczęśliwie odkąd zacząłem na Objective-C, nigdy nie miał sprawdzić, co to znaczy, dopóki złożenie aplikacji został odrzucony z powodu rzekomego wykorzystania prywatnego API . Długa opowieść o wygenerowanej metodzie setPrimitiveTypeValue:, ale nie o to chodzi w moim pytaniu.

Podczas czytania przewodnika natknąłem się na pomysł publicznych i prymitywnych akcesorów dla atrybutów encji. Kolejny cytat, ale dalej:

Przykładowo, jeżeli podmiot z atrybutem firstName Core danych automatycznie generuje firstName, setFirstName:, primitiveFirstName i setPrimitiveFirstName:.

Do czego służą prymitywne akcesoria? Czy można tak po prostu przypisać wartość BOOL, bez owijania jej w NSNumber? Jeśli tak, to dlaczego firma mogenerator miała problemy z generowaniem różnego rodzaju akcesorów <Attribute>Value, set<Attribute>Value:, , primitive<Attribute>Value, setPrimitive<Attribute>Value:?

Jestem zdezorientowany, kto może mi pomóc?


Powiązane pytania:

+0

Ktoś inny [odpowiedział na to już] [1] z czymś, co wygląda na dobrą odpowiedź. [1]: http://stackoverflow.com/questions/5509106/why-would-i-need-to-use-a-primitive-accessor-methods-in-a-core-data- projekt – Simon

Odpowiedz

10

O ile dobrze rozumiem, sposób prymitywny robi rzeczywistego pobierania i ustawiania , ale nie wysyła żadnych powiadomień KVC lub KVO ("willAccessValueForKey" i tak dalej). Metoda publiczna wywołuje metodę pierwotną, ale owija połączenie w wywołaniach KVO. Tak więc spoza obiektu zazwyczaj wywoływane są metody publiczne, ale jeśli musisz użyć właściwości obiektu z przyczyn wewnętrznych (na przykład do sprawdzenia poprawności lub uzyskania innej właściwości), użyj metod pierwotnych, aby uniknąć ostrzału wszystkie powiadomienia.

Chciałbym powitać żadnych poprawek lub wyjaśnień na odpowiedź, jak to jest, jestem zainteresowany, ale nie w pełni zorientowani w.

+0

Niesamowita odpowiedź @jrturton. Po prostu dodajesz ten link jako odniesienie, jeśli ludzie chcą szybko rzucić okiem na [Custom Primitive Accessor Methods] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html # // apple_ref/doc/uid/TP40002154-SW5) w dokumencie Core Data, który tworzy kopię zapasową odpowiedzi. – Mick

+1

@ Patt wow to musiała być jedna z moich pierwszych odpowiedzi SO! Przebij się z przeszłości ... – jrturton

+0

@Klik ten link jest już nieaktualny. – ThomasW

0

@ odpowiedziami pokryte kwestii jrturton w zakresie Niestandardowy Atrybut i do jednego związku Metody dostępu, gdzie dostęp publiczny jest prosty.

Ponadto, aby w pełni wspierać do wielu związku dostępowe, w niestandardowej implementacji public Akcesory może trzeba zadzwonić prymitywne-akcesorów w połączeniu z metodami NSMutableSet (unionSet a minusSet :), które muszą być opakowane w środku Pary metod KVO (zrobią to ...).