CoreData学习笔记

来源:互联网 发布:bitcomet 端口阻塞 编辑:程序博客网 时间:2024/05/29 17:19

首先介绍一下CoreData的主要对象,接下来是一个案例分解步骤和整体实现。

CoreData主要对象

   1.Managed Object Context (管理数据内容):

    操作实际内容(操作持久层)

    作用:插入数据,查询数据,删除数据

    

   2.Managed Object Model (管理数据模型):

    数据库所有数据表格或数据结构,包含各实体的定义信息

    作用:添加实体的属性,建立属性之间的关系

    操作方法:视图编辑器 代码

    

   3.Persistent Store Coordinator (持久性数据协调器):

    相当于数据库的连接器

    作用:设置数据存储的名字,位置,存储方式,存储时机

    

   4.Managed Object:

      相当于数据库中的表格记录

    

   5.NSFetchRequest (获取数据的请求):

    相当于查询语句

    

   6.NSEntityDescription (实体结构):

    相当于表格结构

    

   7.后缀为.xcdatamodeld的包:

   里面是.xcdatamodeld文件,用数据模型编辑器编辑

   编译后为.momd.mom文件

    

   CoreData中有几个概念要清楚Model,Entity,Attribute,Relationship.

   可以简单地用关系数据库的概念来解释:Modeldatabase,Entity对应一张表,Attibute为表中的字段,relationship为关系。


1.创建上下文

NSManagedObjectContext * context=[[NSManagedObjectContextalloc]init];

    context.persistentStoreCoordinator=psc;


2.创建基础库协调器

NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];


3.初始化模型

NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];


4.为协调器添加基础库路径和基础库类型

[psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:nil];


5.获取沙盒路径

NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject];

    path=[path stringByAppendingPathComponent:@"Info.sqlite"];

   NSLog(@"%@",path);


6.拼接URL

NSURL * url=[[NSURLalloc]initFileURLWithPath:path];


7.创建表  - - - 插入数据

NSManagedObject * student=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:context];

    

    [studentsetValue:@"zhangsan"forKey:@"name"];

    [studentsetValue:@13forKey:@"age"];


8.创建第二个表

NSManagedObject * book=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Book"inManagedObjectContext:context];

    

    [book setValue:@"pipigou"forKey:@"name"];

    [book setValue:@"jiang"forKey:@"author"];

    [booksetValue:@10forKey:@"price"];


9.保存

NSError * error;

[contextsave:&error];





完整代码如下:

- (void)viewDidLoad {

    [superviewDidLoad];

    

    // 3>初始化模型

    NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];

    

    // 2>创建基础库协调器

    NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];

    

    // 5>获取沙盒路径

    NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject];

    path=[path stringByAppendingPathComponent:@"Info.sqlite"];

   NSLog(@"%@",path);

    

    // 6>拼接URL

    NSURL * url=[[NSURLalloc]initFileURLWithPath:path];

    

    // 4>为协调器添加基础库路径和基础库类型

    [psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:nil];

    


    // 1>创建上下文

    NSManagedObjectContext * context=[[NSManagedObjectContextalloc]init];

    context.persistentStoreCoordinator=psc;


    

    // 7>插入数据 ---创建表

    NSManagedObject * student=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:context];

    //插入数据

    [studentsetValue:@"zhangsan"forKey:@"name"];

    [studentsetValue:@13forKey:@"age"];

    

    // 8>创建第二个表

    NSManagedObject * book=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Book"inManagedObjectContext:context];

    

    [book setValue:@"pipigou"forKey:@"name"];

    [book setValue:@"jiang"forKey:@"author"];

    [booksetValue:@10forKey:@"price"];

    

    

    // 6>保存

   NSError * error;

    [contextsave:&error];

    

}



0 0