開発
Including Core Data in existing iOS project
will
Core Data is not new for many iOS developers. It was introduced in Mac OS X 10.4 Tiger and iOS 3.0. It provides possibility to include data store functions quickly to Mac OS App and iOS app.
There are already official manuals from Apple and a lot of blogs from other iOS developers[1][2].
This blog is aimed at including the necessary informations to have a fast usage of Core Data in existing iOS app.
1. Create Data Model of Core Data
File >> New >> File, select Core Data >> Data Model. A new xcdatamodeld file will be included in the project.
2. Include the CoreData.framework in the project
3. In the AppDelegate.h, including the following code:
#import <CoreData/CoreData.h> #define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)
4. In the AppDelegate.m, including the following methods:
/**
 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 by merging all of the models found in the application bundle.
 */
- (NSManagedObjectModel *)managedObjectModel {
	
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    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 = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"RoomMap.sqlite"]];//you can decide the name of sqlite file
	
	NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    
	// Allow inferred migration from the original version of the application.
	NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
							 [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
							 [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
	
	if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        // Handle the error.
    }
	
    return persistentStoreCoordinator;
}
/**
 Returns the path to the application's documents directory.
 */
- (NSString *)applicationDocumentsDirectory {
	
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}
5. In AppDelegate.m, add these code in the – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions method
    // Override point for customization after application launch.
    NSManagedObjectContext  *context = [self managedObjectContext];
    managedObjectContext = context;
Finished to include the necessary code, you can start to use core data to store information.
References:
[1] Core Data on iOS 5 Tutorial: Getting Started
[2] Core Data Tutorial for iOS
                  2024/09/13
                  2024/05/17
                                    2024/05/10
                  2024/01/05
                  2023/08/18
                  2023/07/14
                  2023/05/12