!!! Listings zum Artikel "Kernansicht" !!! von Karl Bank aus iX 5/2012, S. 150 !!! Listing 1: Implementierung einer Löschmethode - (IBAction) deleteAll:(id) sender { NSManagedObjectContext* context = [self managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSError *error = nil; NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; [fetchRequest release]; for (int nextIndex=0; nextIndex<[fetchedObjects count]; nextIndex++) { [context deleteObject:[fetchedObjects objectAtIndex:nextIndex]]; } [context commitEditing]; } !!! Listing 2: Importieren externer Daten // Import CSV Data from a file in a given format - (IBAction) importData:(id) sender { NSString *path = @"/Users/karlbanke/Desktop/importdata.txt"; NSData *data = [NSData dataWithContentsOfFile:path]; // assuming data is in UTF8 NSString *fileContent = [NSString stringWithUTF8String:[data bytes]]; // Each line is a new object NSManagedObjectContext *context = [self managedObjectContext]; NSArray *lines = [fileContent componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]]; for (int li=0;li<[lines count];li++) { NSString *nextLine = [lines objectAtIndex:li]; NSArray *entries = [nextLine componentsSeparatedByString:@";"]; NSObject *nextPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]; NSObject *nextAddress = [NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:context]; [nextAddress setValue:nextPerson forKey:@"owner"]; for (int ei=0;ei<[entries count];ei++) { NSString *nextField = [entries objectAtIndex:ei]; switch (ei) { case 0: [nextPerson setValue:nextField forKey:@"lastName"]; break; case 1: [nextPerson setValue:nextField forKey:@"firstName"]; break; case 2: [nextAddress setValue:nextField forKey:@"addressLine1"]; break; case 3: [nextAddress setValue:nextField forKey:@"postcode"]; break; case 4: [nextAddress setValue:nextField forKey:@"city"]; break; } } } [context commitEditing]; } !!! Listing 3: Alle Felder vorgegeben #import #import @interface Phone : NSManagedObject { @private } @property (nonatomic, retain) NSString * areaCode; @property (nonatomic, retain) NSString * countryCode; @property (nonatomic, retain) NSString * extension; @property (nonatomic, retain) NSString * phoneNumber; @property (nonatomic, retain) NSManagedObject *owner; @end !!! Listing 4: prettyPhoneNumber und keyPathsForValuesAffectingValueForKey !!! prettyPhoneNumber / keyPathsForValuesAffectingValueForKey: bitte kursiv - (NSString*) prettyPhoneNumber { NSString *result = [NSString stringWithFormat:@"%@ %@/%@-%@", [self countryCode]!=nil?[self countryCode]:@"", [self areaCode]!=nil?[self areaCode]:@"", [self phoneNumber]!=nil?[self phoneNumber]:@"", [self extension]!=nil?[self extension]:@"" ]; return result; } + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key]; if ([key isEqualToString:@"prettyPhoneNumber"]) { NSSet *affectingKeys = [NSSet setWithObjects:@"countryCode", @"phoneNumber", @"areaCode", @"extension",nil]; keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys]; } return keyPaths; }