Override på en Coredata-objekt setter

Skrevs: May 14th, 2010 | Av: anders | Kategori: iphone | Taggad: , , , | Inga kommentarer »

Om du skapat ett Coredata-objekt med en uppsättning attribut och automat-genererat en klass kan det hända att du vill ändra en set-funktion. I mitt fall ville jag exempelvis nyligen uppdatera “tid för senaste updatering” samtidigt som jag favorit-markerade ett objekt.

I och med att alla Coredata-attribut är @dynamic kan du inte sätta värden som om det vore en vanlig @property utan du använder dig av Key Value Coding:

-(void) setFavourite:(NSNumber *) newFav {

[self willChangeValueForKey:@"favourite"];

[self setPrimitiveValue:newFav forKey:@"favourite"];

[self didChangeValueForKey:@"favourite"];

[self timestamp];

}

Det viktiga här är, för det första, att du använder willChangeValueForKey och didChangeValueForKey. Sen kan du använda setValue: forKey: vilket jag fått att fungera för NSString-attribut, men inte för NSNumber – så använd setPrimitiveValue: forKey: istället. Vad jag förstått är det generellt att föredra.

Då vi ändå är inne på key values så tänkte jag tipsa om key-paths. Letade rätt på en bloggpost som visar lite saker du kan använda det till – exempelvis smidigt söka igenom en NSArray eller NSDictionary.



Spontan kommentar?