当前位置: 首页 > 编程语言 > 其它 > 正文

CoreData的增删改查概述

时间:2015-07-18 cnblogs 云淡风轻我爱编程

近几天一直在使用 CoreData, 以前觉得它是一门高深的技术, 等自己用了之后才觉得,它是那么的平易近人.

一: 首先我们要在创建应用程序的时候勾选 UseCoreData 选项, 当然也可以自己后期创建.

系统会生成如下AppDelegate.h的文件

#import <UIKit/UIKit.h>
    
@interface AppDelegate : UIResponder <UIApplicationDelegate>
    
@property (strong, nonatomic) UIWindow *window;
    
// 上下文对象
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
// 数据模型
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
// 协调者
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    
// 在应用程序终止的时候会调用该方法
- (void)saveContext;
// 得到应用程序的 Documents 路径, 将数据库存在此目录下
- (NSURL *)applicationDocumentsDirectory;
    
@end

AppDelegate.m 文件会多出如下几个方法:
 

- (void)applicationWillTerminate:(UIApplication *)application
{
    // 保存上下文对象的方法在此调用(程序结束的时候)
    [self saveContext];
}
    
#pragma makr - save context
- (void)saveContext
{
    // 程序意外终止就会调用此方法
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
}
    
#pragma mark - Core Data stack
- (NSManagedObjectContext *)managedObjectContext
{
    // 创建上下文对象
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }
        
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}
    
- (NSManagedObjectModel *)managedObjectModel
{
    // 创建数据模型
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo02" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    // 创建协调者,也就是存储区
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }
        
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataDemo02.sqlite"];
        
    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    
        
    return _persistentStoreCoordinator;
}
    
#pragma mark - Application's Documents directory
- (NSURL *)applicationDocumentsDirectory
{
    // 得到 Documents 目录
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

这就是系统为我们搭建好的框架,我们只需要进行数据操作便可.