coreData是用于对数据进行实例化处理的类
首先在创建项目的时候需要勾选Use Core Data
在勾选了coreData之后会生成对应的.xcdatamodeld文件。
这种文件在经过编译之后会变成 .momd文件
然后选中这个文件 双击打开
点击下面的加号 可以增加一个实体
会出现这样的一个实体
然后点击Attributes可以添加这个实体对应的属性(我们说的把数据存起来,其实就是找到实体所对应的属性,然后对属性赋值)
都创建完之后点击
选择Create
NSManagedObject SubClass
用法
1.首先声明一个
NSManagedObjectContext
*context;类型的对象
这个context上下文对象是用来对数据实体化进行操作的管理对象
实例化上下文:
NSString
*storePath= [
NSSearchPathForDirectoriesInDomains
(
NSDocumentDirectory
,
NSUserDomainMask
,
YES
).
firstObject
stringByAppendingString
:
@"/CoreData.db"
];
获取文档目录下地数据库的path
self
.
context
=[[
NSManagedObjectContext
alloc
]
initWithConcurrencyType
:
NSPrivateQueueConcurrencyType
];//后面的参数一般是选私有的这个。
//
需要给数据库管理关联一个数据持久化协调器
,
我们要使用这个协调器进行实体和
sqlite
之间的通信
//URL 表示实体所在的 .xcdatamodeld 文件的路径
//URL 表示实体所在的 .xcdatamodeld 文件的路径
//xcdatamodeld
这个类型在编译的时候会生成
.momd
这个文件即可
NSString *path=[[NSBundle mainBundle]pathForResource:@"CoreDateDemo" ofType:@"momd”];//找到这个momd文件所在的路径
NSURL
*url=[
NSURL
fileURLWithPath
:path];//把路径转换为url
NSManagedObjectModel
*model=[[
NSManagedObjectModel
alloc
]
initWithContentsOfURL
:url];//把得到的文件转换为
NSManagedObjectModel类型的数据
NSPersistentStoreCoordinator
*coordinator=[[
NSPersistentStoreCoordinator
alloc
]
initWithManagedObjectModel
:model];
// 设置存储类型为 SQLite
//type: 数据存储的类型
//URL 表示需要存储的数据在沙盒中得路径
// 设置数据持久化存储的路径
// 设置存储类型为 SQLite
//type: 数据存储的类型
//URL 表示需要存储的数据在沙盒中得路径
// 设置数据持久化存储的路径
NSURL *coreDataPath=[NSURL fileURLWithPath:storePath];//找到数据库所在的路径
[coordinator
addPersistentStoreWithType
:
NSSQLiteStoreType
configuration
:
nil
URL
:coreDataPath
options
:
nil
error
:
nil
];//把要管理的数据库类型转换为SQLite类型的
[self.context setPersistentStoreCoordinator:coordinator];//设置要管理的coreData协调器。
2.插入数据
此处Person是上面通过打开文件后创建实体,在实体中添加完属性由系统生成的文件,我们在用的时候需要导入.文件
Person
*p=[
NSEntityDescription
insertNewObjectForEntityForName
:
@"Person"
inManagedObjectContext
:
self
.
context
];//这里是把实体去出来赋值给p;
//设置属性
p.name=@“张三”;
p.age=@15;
[
self
.
context
save
:
nil
]//这里值得注意的是,每次做完更改之后都需要save保存操作。后面的nil参数是一个错误信息,可要可不要
3.删除数据
NSManagedObject
*p;
[
self
.
context
deleteObject
:p];
值得注意的是,在这里要删除的对象必须是
NSManagedObject类型的,并且传入的类型不能为nil,如果传入的参数为nil,则直接崩溃
self
.
context
save
:
nil
]//这里值得注意的是,每次做完更改之后都需要save保存操作。后面的nil参数是一个错误信息,可要可不要
4.查询信息
查询信息这一块系统有封装好的代码快 只要在函数内部输入fetch就会调用这段代码块
NSFetchRequest
*fetchRequest = [[
NSFetchRequest
alloc
]
init
];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"<#Entity name#>" inManagedObjectContext:<#context#>]; //第一个参数为实体的名字
这里是Person 第二个参数为上下文管理对象,这里指self.context
[fetchRequest
setEntity
:entity];
// Specify criteria for filtering which objects to fetch
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<#format string#>", <#arguments#>];//这里指的时查询谓词,即相当于SQL中的where条件,里面的参数主要是对查询谓词进行格式化
[fetchRequest
setPredicate
:predicate];
// Specify how the fetched objects should be sorted
// Specify how the fetched objects should be sorted
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#key#>"
ascending:YES];//此行代码的作用是在查询的时候对结果进行排序,key指的是排序字段, 后面ascending YES是按照升序排序 NO是按照降序排序
[fetchRequest
setSortDescriptors
:[
NSArray
arrayWithObjects
:sortDescriptor,
nil
]];
NSError *error = nil;
NSArray *fetchedObjects = [<#context#> executeFetchRequest:fetchRequest error:&error];//这段代码中的第一个参数是指上下文管理对象 self.context fetchedObjects是最后查询出来的数组。
if
(fetchedObjects ==
nil
) {
<#Error handling code#>
<#Error handling code#>
}
5.更改信息
在修改信息首先确定好要修改那个实体的信息 例如要修改Person *per的信息
那么 修改的方式为
per.
name
=
@"
刘德华
"
;
[self.context save:nil];
每次操作之后都要记得save就OKle