Немного о CoreData

No comments on Немного о CoreData

Written by

in

Core Data – это объектноориентированная оболочка над базой данных приложения в iOS/Mac OS. Позволяет создавать таблицы визуально, сама следит за Commitment Control, управлением версиями и т.д.

Persistent Store – это “надежное” хранилище данных. (NSPersistenStoreCoordinator). Данные хранятся в applicationDocumentsDirectory/App.sqlite. Где App.sqlite – это база SQLite приложения.
Context – это instance базы. Промежуточное хранилище, в котором производятся изменения и затем утверждаются (Commitment). Также запрос производится из Context. У одной базы может быть много Context. В каждом Context есть Managed Objects.
Managed Object – объект, с которым мы работаем, но изменения, которые мы в него вносим не вносятся в Persistent Store до тех пор, пока мы не сделаем Save.

CoreData – Core Data Programming Guide

CoreDataSnippets – Core Data Code Snippets

Базовый запрос без предиката всех строк из таблицы:

+ (BOOL)basicFetch {
    // Test Fetch of 1 item 
    
    useDelegate
    NSManagedObjectContext *context = appDelegate.managedObjectContext;
    if (context == nil) {
        NSLog(@"Error: No context");
        return NO;
    }
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
entityForName:@"FLCatRanking" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    
    NSError *error = nil;
    NSArray *fetchedObjects = [context 
executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects == nil) {
        // Handle the error
        NSLog(@"Error: No fetched objects.");
        return NO;
    }
    
    // Take first product name
    FLCatRanking *flCatRanking = [fetchedObjects objectAtIndex:0];
    NSLog(@"First fetched item: %@", flCatRanking.prodID);
    return YES;
}

Запрос с фильтрацией – аналог WHERE в SQL :

+ (NSMutableDictionary*) retrieveProductsForCategory:
(NSString*) catName {
    
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    
    useDelegate
    NSManagedObjectContext *context = appDelegate.managedObjectContext;
    if (context == nil) {
        NSLog(@"Error: No context");
        return nil;
    }
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSPredicate *predicate = [NSPredicate 
predicateWithFormat:@"prodCatName == %@", catName];
    NSEntityDescription *entity = [NSEntityDescription 
entityForName:@"FLCatRanking" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    [fetchRequest setPredicate:predicate];
    
    NSError *error = nil;
    NSArray *fetchedObjects = [context 
executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects == nil) {
        // Handle the error
        NSLog(@"Error: No fetched objects.");
        return nil;
    }
    
    // Take first product name
    for (FLCatRanking *flCatRanking in fetchedObjects) {
        NSLog(@"FLCatRanking item: %@ - %@", flCatRanking.prodID, 
flCatRanking.prodPos);
        [dic addEntriesFromDictionary:[NSDictionary 
dictionaryWithObject:flCatRanking.prodID 
forKey:flCatRanking.prodPos]];
    }
    
    return dic; 
}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *