Core Data II: Abfragen, Toolbox
Core Data-Abfragen
-
Einem
NSFetchRequestkann mitsetPredicateein Prädikat gesetzt werden.NSPredicategibt vergleichbar mit SQL Kriterien für Abfragen an:NSPredicate *bmw = [NSPredicate predicateWithFormat: @"maker.name == %@", @"BMW"]; // [c] = case insensitive NSPredicate *modelNameSimilarTo = [NSPredicate predicateWithFormat:@"%K like[c] %@", @"name", @"mini"]; NSPredicate *lengthGT400 = [NSPredicate predicateWithFormat: @"length > 400"]; // Verknüpfung mit NSCompoundPredicate NSArray* predicateList = [NSArray arrayWithObjects:bmw, lengthGT400, nil]]; NSPredicate *bigBmwPredicate = [[[NSCompoundPredicate alloc] initWithType:NSAndPredicateType subpredicates:predicateList] autorelease]; [fetchRequest setPredicate:bigBmwPredicate];
Core Data: NSFetchedResultsController
NSFetchedResultsControllerbietet Unterstützung für die Anzeige der Ergebnisse einesNSFetchRequestsin einemUITableView.- Siehe Beispielanwendung
iPhoneCoreDataRecipes.
Core Data Toolbox: DataQuery
-
DataQuerywrappt einenNSFetchRequest. Die Klasse ist insbesondere zur Verwendung inRepository-Klassen bestimmt und erlaubt das flexible Kombinieren von Filterbedingungen:@implementation CarRepository - (DataQuery*) cars { return [DataQuery dataQueryWithEntityName:@"Car" objectContext:someObjectContext]; } - (NSPredicate*) predicateCarWithName:(NSString*) name { return [NSPredicate predicateWithFormat:@"name ==[c] %@", name]; } @end
Anwendungsbeispiel: DataQuery
DataQuery* query = [carRepository cars];
[query addPredicate:[carRepository predicateCarWithName:@"Skoda"]];
[query addSortBy:@"year" asc:YES];
NSArray* results = [query allResults];
Car* oldestCar = (Car*) [query firstResult];
Core Data Toolbox: CoreDataManager
-
CoreDataManagererledigt die Initialisierung von Core Data:@implementation SomeAppDelegate - (void)applicationDidFinishLaunching:(UIApplication *)application { coreDataManager = [[CoreDataManager managerWithDbName:@"someDb"] retain]; NSManagedObjectContext *context = coreDataManager.managedObjectContext; // ... } - (void)applicationWillTerminate:(UIApplication *)application { [coreDataManager persist]; } @end
Core Data Toolbox: ManagedTableViewController
ManagedTableViewControllerist eine Basisklasse fürUITableViewController, die zur Anzeige von Tabellen aus Core Data-Abfragen verwendet werden kann (basiert aufNSFetchedResultsController).ManagedTableViewControllerzeigt die Ergebnisse einesDataQueryan und ermitteltsectionNameundcellTextaus Properties der angezeigten Objekte.- Die Ergebnismenge wird beobachtet und die Anzeige bei Änderungen entsprechend aktualisiert.
Anwendungsbeispiel ManagedTableViewController
@interface CarListController : ManagedTableViewController
// ...
@end
@implementation CarListController
- (id) initWithCarRepository: (CarRepository*) aCarRepository {
if (self = [super initWithStyle:UITableViewStylePlain
dataQuery: [aCarRepository cars]
sectionNameKeyPath: @"car.maker"
cellTextKeyPath: @"name"]) {
// ...
}
return self;
}
Empfehlung: Projektstruktur
Weitere Informationen
- iphonetoolbox: http://github.com/ralfebert/iphonetoolbox/

