一.先理解一下coredata中的关系图:
二.CoreData的创建步骤:
准备工作:
方法一:新建一个工程,并勾选”Core Data”
方法二:创建一个”Core Data”的类
然后再添加实体,如图(这只是一个示范数据):
1.数据模型 (NSManagedObjectModel的创建)
2. 数据持久(NSPersistentCoornaditor的创建,装载数据)
3. 数据操作对象(NSManagedObjectContext的创建)
三.CoreData添加数据
- 使用xcode工具自动生成model类,点击”core data”的文件,然后选择菜单栏上的”Editor”,再选择”addNSManagerObjectsModel Subclass”,选择core data 和实体,就创建了一个类目,和一个model类
如下图:
5.创建MO对象,用实体描述类
6.给MO对象属性赋值
7.把上下文保存下来
三.代码实现
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "Hero.h"
@interface ViewController ()
{
NSManagedObjectContext *context;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@",NSHomeDirectory());
[self createCoreDataBase];
[self addObject];
// Do any additional setup after loading the view, typically from a nib.
}
//创建数据库
-(void)createCoreDataBase{
//CoreData:
//根据CoreDataModel文件,在磁盘中创建sqlite文件
//1 NSManagedObjectModel
//xcdatamodeld文件编译打包到bundle中,转变成momd文件
NSURL *dataUrl = [[NSBundle mainBundle]URLForResource:@"CoreDataModel" withExtension:@"momd"];
NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:dataUrl];
//2 根据dataModel对象创建协调器
// 1>创建协调器 (建立数据<--->MO对象的联系)
// 使用这个对象,间接操作数据库文件
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:dataModel];
//2>给协调器对象添加一个持久化的对象
/*CoreData支持的存储数据的文件类型
NSSQLiteStoreType:SQLite
NSXMLStoreType XML
NSBinaryStoreType 二进制
NSInMemoryStoreType 只保存在内存中
*/
//数据库文件在沙盒保存的路径
NSString *persistentPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/PersistentStore.sqlite"];
NSURL *persistentUrl = [NSURL fileURLWithPath:persistentPath];
NSError *addError = nil;
[psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil //配置
URL:persistentUrl //数据库文件保存的路径
options:nil error:&addError];
//3 保存数据模型的上下文
context = [[NSManagedObjectContext alloc]init];
//指定contex使用哪个协调器写入数据库
context.persistentStoreCoordinator = psc;
}
//添加数据
-(void)addObject{
//0 创建model模型
/*
//添加一条数据 (MO对象)
Hero *h1 = [[Hero alloc]init];
//将MO对象添加到上下文中
[context insertObject:h1];
h1.name = @"haha";
[context save:nil];
*/
//创建MO对象,使用实体描述类
/*
EntityForName:data model文件中的哪个实体
Context:要插入的上下文
*/
Hero *h1 = [NSEntityDescription insertNewObjectForEntityForName:@"Hero"
inManagedObjectContext:context];
h1.name = @"孙悟空";
h1.heroId = @100;
h1.team = @"西天取经队";
h1.height = @1.5;
//把上下文的变化保存下来
NSError *saveError = nil;
[context save:&saveError];
}
@end