Posted: July 26th, 2010 | Author: anders | Filed under: iphone | Tags: coredata, iphone, iphone simulator, xcode | No Comments »
När jag skulle initera mina CoreData-lagringen med:
[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]
Fick jag följande fel:
Error Operation could not be completed. (Cocoa error 134100.)
När du ändrat i dina CoreData-modeller så blir det alltid fel och det brukar normalt räcka med att köra en reset på iPhone Simulator, men den här gången räckte det inte. En timme senare inser jag att det här behöves köra en “Clean all targets” så fungerade allt igen. Litet litet tips…
Posted: May 14th, 2010 | Author: anders | Filed under: iphone | Tags: coredata, iphone, objective-c, xcode | No Comments »
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.