User Tools

Site Tools


ios-labs-s14:advanced-core

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
ios-labs-s14:advanced-core [2014/02/25 15:47]
mbarboi created
ios-labs-s14:advanced-core [2014/02/26 10:28]
mbarboi
Line 6: Line 6:
 Implementing CoreData into your application:​ Implementing CoreData into your application:​
   -Add CoreData framework   -Add CoreData framework
-  -Import CoreData+  -Import CoreData ​Headers 
 +  -Add methods to AppDelegate
  
 +Adding CoreData Accessors:
 +====Adding CoreData Methods====
 +  *Add the following code to AppDelegate.h right before //@end//
 +<​code>​
 +@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;​
 +@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;​
 +@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;​
 +
 +- (void)saveContext;​
 +- (NSURL *)applicationDocumentsDirectory;​
 +</​code>​
 +
 +  *Add the following code to AppDelegate.m immediately after //​@implementation//​
 +<​code>​
 +@synthesize managedObjectContext = _managedObjectContext;​
 +@synthesize managedObjectModel = _managedObjectModel;​
 +@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;​
 +</​code>​
 +
 +  *Add the following code to AppDelegate.m right before //@end//
 +<​code>​
 +- (void)saveContext
 +{
 +    NSError *error = nil;
 +    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;​
 +    if (managedObjectContext != nil) {
 +        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&​error]) {
 +            // Replace this implementation with code to handle the error appropriately.
 +            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application,​ although it may be useful during development.
 +            NSLog(@"​Unresolved error %@, %@", error, [error userInfo]);
 +            abort();
 +        }
 +    }
 +}
 +
 +#pragma mark - Core Data stack
 +
 +// Returns the managed object context for the application.
 +// If the context doesn'​t already exist, it is created and bound to the persistent store coordinator for the application.
 +- (NSManagedObjectContext *)managedObjectContext
 +{
 +    if (_managedObjectContext != nil) {
 +        return _managedObjectContext;​
 +    }
 +    ​
 +    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];​
 +    if (coordinator != nil) {
 +        _managedObjectContext = [[NSManagedObjectContext alloc] init];
 +        [_managedObjectContext setPersistentStoreCoordinator:​coordinator];​
 +    }
 +    return _managedObjectContext;​
 +}
 +
 +// Returns the managed object model for the application.
 +// If the model doesn'​t already exist, it is created from the application'​s model.
 +- (NSManagedObjectModel *)managedObjectModel
 +{
 +    if (_managedObjectModel != nil) {
 +        return _managedObjectModel;​
 +    }
 +    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:​@"​Model"​ withExtension:​@"​momd"​];​
 +    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:​modelURL];​
 +    return _managedObjectModel;​
 +}
 +
 +// Returns the persistent store coordinator for the application.
 +// If the coordinator doesn'​t already exist, it is created and the application'​s store added to it.
 +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
 +{
 +    if (_persistentStoreCoordinator != nil) {
 +        return _persistentStoreCoordinator;​
 +    }
 +    ​
 +    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:​@"​_.sqlite"​];​
 +    ​
 +    NSError *error = nil;
 +    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:​[self managedObjectModel]];​
 +    if (![_persistentStoreCoordinator addPersistentStoreWithType:​NSSQLiteStoreType configuration:​nil URL:​storeURL options:nil error:&​error]) {
 +        /*
 +         ​Replace this implementation with code to handle the error appropriately.
 +         
 +         ​abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application,​ although it may be useful during development.
 +         
 +         ​Typical reasons for an error here include:
 +         * The persistent store is not accessible;
 +         * The schema for the persistent store is incompatible with current managed object model.
 +         Check the error message to determine what the actual problem was.
 +         
 +         
 +         If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application'​s resources directory instead of a writeable directory.
 +         
 +         If you encounter schema incompatibility errors during development,​ you can reduce their frequency by:
 +         * Simply deleting the existing store:
 +         ​[[NSFileManager defaultManager] removeItemAtURL:​storeURL error:nil]
 +         
 +         * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
 +         ​@{NSMigratePersistentStoresAutomaticallyOption:​@YES,​ NSInferMappingModelAutomaticallyOption:​@YES}
 +         
 +         ​Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.
 +         
 +         */
 +        NSLog(@"​Unresolved error %@, %@", error, [error userInfo]);
 +        abort();
 +    }
 +    ​
 +    return _persistentStoreCoordinator;​
 +}
 +
 +#pragma mark - Application'​s Documents directory
 +
 +// Returns the URL to the application'​s Documents directory.
 +- (NSURL *)applicationDocumentsDirectory
 +{
 +    return [[[NSFileManager defaultManager] URLsForDirectory:​NSDocumentDirectory inDomains:​NSUserDomainMask] lastObject];​
 +}
 +
 +</​code>​
 +
 +===CoreData Vocabulary===
 +  -Persistent Store Coordinator- As the name suggest it is a coordinator , that coordinates between manage object context and low level file saved in our data base (Sqlite file)
 +  -ManagedObjectContext- You can think of a managed object context as an intelligent scratch pad. When you fetch objects from a persistent store, you bring temporary copies onto the scratch pad . You can then modify those objects however you like. Unless you actually save those changes, however, the persistent store remains unaltered.
 +  -NSManageObject Model- A managed object model is an instance of the NSManagedObjectModel class. It describes a schema (contains definitions) for objects (also called entities )—that you use in your application. Filename is  *.xcmodeld
 +  -Properties (of entity )- An entity’s properties are its attributes and relationships. Amongst other features, each property has a name and a type.
ios-labs-s14/advanced-core.txt · Last modified: 2014/02/26 10:28 by mbarboi