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模型