CoreData数据库
建立模型文件的过程数组
1.选择模板框架
2.添加实体编辑器
3.添加实体的属性【注意】属性的首字母必须小写fetch
1、CoreData管理类(必备如下三个类对象)url
1.CoreData数据操做的上下文,负责全部的数据操做,相似于SQLite的数据库链接句柄(NSManagedObjectContext)spa
(1).初始化方式线程
//参数“ct”的类型code
//三种类型orm
/*
NSConfinementConcurrencyType 默认值,容许在特定的线程中执行,几乎不用
NSPrivateQueueConcurrencyType 只会在主线程中执行
NSMainQueueConcurrencyType 容许在子线程中执行
*/
- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct
(2).设置持久化存储协调器(属性)
persistentStoreCoordinator
2.管理模型(NSManagedObjectModel)
(1).通常都须要先获取获取模型文件的URL地址
/*
参数一:模型文件的名字
参数二:模型文件的后缀名字
【注意】:后缀名为.xcdatamodel的包,里面的.xcdatamodel文件,用数据模型编辑器编辑,编译后为.momd或.mom文件
*/
方法:[[[NSBundle mainBundle] URLForResource:(NSString *)name withExtension:(NSString *)ext]
(2).初始化NSManagedObjectModel对象,加载模型文件,读取App中的全部实体信息
//参数一:该URL即指(1)中的模型文件的url路径
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url;
3.持久化存储协调器(NSPersistentStoreCoordinator)
(1).初始化方式
- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model
说了这么多,其实以上三个coreData核心对象只要咱们在建立工程时,打上该勾选,Xcode就会帮咱们搭建好框架的,接下来咱们只须要知道怎么调用
【注意】黑色表示类名,红色表示类里面的一个属性方法
2、添加数据 : 在上下文中插入一个实体(NSManagedObject)
1.model = [NSEntityDescription insertNewObjectForEntityForName:实体名 inManagedObjectContext:管理实体的上下文];
【注意】该model必须是NSManagedObject的对象,通常模型都继承NSManagedObject
2.经过Key-Value模式设置插入模型的属性值
3.将数据同步到持久化存储库 : save模型 [NSManagedObjectContext save:nil];
3、查询数据
1. 指向某个表的请求类
//参数entityName:即建立的实体名(在SQLite中称为表名)
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:(NSString*)entityName];
2. 添加查询条件
(1).条件写死在字符串中
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = 50"];
(2).动态传值
/*
%K 查询的字段
%@ 查询的值
*/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"age", @(50)];
(3).排序(NSSortDescriptor)
//第一步:初始化
/*
参数一:key值,即排序根据的属性
参数二:NO为降序,YES为升序
*/
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
//第二步:给fetchRequest添加排序方式
fetchRequest.sortDescriptors = @[sort];
(4)范围查询
//范围运算符(两种): IN(指定的值) BETWEEN(开区间)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {15,60}"];
(5).字符串相关查找
/*3⃣️
字符串相关:BEGINSWITH、ENDSWITH、CONTAINS
例:
@“属性名 CONTAINS[cd] ‘包含的字符串’” // 包含某个字符串
@“属性名 BEGINSWITH[c] '包含的字符串'" // 以某个字符串开头
@"属性名 ENDSWITH[d] '包含的字符串'" // 以某个字符串结束
【注意】:包含的字符串要用单引号括上
注:[c]不区分大小写
[d]不区分发音符号即没有重音符号
[cd]既不区分大小写,也不区分发音符号。
*/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username ENDSWITH 'wu '"];
(6).通配符查找
/*
通配符:LIKE
例:
@"属性名 LIKE[cd] '*er*'" // *表示多个字符
@"属性名 LIKE[cd] '???er*'" // ?表示一个字符
*/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username LIKE '*san*'"];
…………..还有其余条件设置,我会上传一份比较综合的文档给你们
3. 设置查询条件
fetchRequest.predicate = predicate;
4. 执行请求,请求的结果被放在数组中,数组中存放的就是模型
NSArray *result = [NSManagedObjectContext executeFetchRequest:fetchRequest error:&error];
4、删除数据
//删除某一个实体(即模型)
[NSManagedObjectContext deleteObject:实体];
只要对模型作了修改,调用save方法就能够自动修改数据库中的值
[NSManagedObjectContext save:nil];
5、修改
直接修改模型属性的值
save模型