iOS基本数据库存储方式 - CoreData

CoreData

创建模型文件的过程

1.选择模板

iOS基本数据库存储方式 - CoreData

iOS基本数据库存储方式 - CoreData

2.添加实体

iOS基本数据库存储方式 - CoreData

3.添加实体的属性【注意】属性的首字母必须小写

iOS基本数据库存储方式 - CoreData

一、CoreData管理类(必备以下三个类对象)

1.CoreData数据操作的上下文,负责所有的数据操作,类似于SQLite的数据库连接句柄(NSManagedObjectContext)

(1).初始化方式

//参数“ct”的类型

//三种类型

/*

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就会帮我们搭建好框架的,接下来我们只需要知道怎么调用

iOS基本数据库存储方式 - CoreData

iOS基本数据库存储方式 - CoreData

【注意】黑色表示类名,红色表示类里面的一个属性方法

二、添加数据 : 在上下文中插入一个实体(NSManagedObject)

1.model = [NSEntityDescription insertNewObjectForEntityForName:实体名 inManagedObjectContext:管理实体的上下文];

【注意】该model必须是NSManagedObject的对象,一般模型都继承NSManagedObject

2.通过Key-Value模式设置插入模型的属性值

3.将数据同步到持久化存储库 : save模型 [NSManagedObjectContext save:nil];

三、查询数据

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];

四、删除数据

//删除某一个实体(即模型)

[NSManagedObjectContext deleteObject:实体];

只要对模型做了修改,调用save方法就可以自动修改数据库中的值

[NSManagedObjectContext save:nil];

五、修改

直接修改模型属性的值

save模型

上一篇:iOS原生数据存储策略


下一篇:浅析jQuery(function(){})与(function(){})(jQuery)之间的区别