CoreData
創建模型文件的過程
1.選擇模板
2.添加實體
3.添加實體的屬性【注意】屬性的首字母必須小寫
一、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就會幫我們搭建好框架的,接下來我們只需要知道怎么調用
【注意】黑色表示類名,紅色表示類里面的一個屬性方法
二、添加數據 : 在上下文中插入一個實體(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模型