CoreData 手動自動 建立context(上下文)
方法一:自定義context
上下文關連資料庫,model模型檔案
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
持久化,把資料儲存到一個檔案,而不是記憶體
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
告訴Coredata資料庫的名字和路徑
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath = [doc stringByAppendingPathComponent:@"YQHItList.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];
_context.persistentStoreCoordinator = store;
方法二:系統自動生成(在AppDelegate內部)然後其他類裡面進行呼叫:
怎麼 取到context?
AppDelegate*appDelegate=[[UIApplication sharedApplication]delegate];
self.context=appDelegate.managedObjectContext;
因為下面程式也要使用到
資料儲存
什麼時候進行資料儲存,要根據你自己的程式來
//確認按鈕
UIAlertAction *okAction=[UIAlertAction actionWithTitle:@"確認新增" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
//例項化實體類
YQPerson *person =[NSEntityDescription insertNewObjectForEntityForName:@"YQPerson" inManagedObjectContext:_context ];
// 給實體類的name賦值
person.name=[alert.textFields[0] text];
NSError*error=nil;
[_context save:&error];
NSLog(@"%@",person.name);
//判斷如果出錯
if (error) {
NSLog(@"%@",person.name);
}
//將資料降入可變陣列
[_mutable addObject:person.name];
//重新整理資料(全域性重新整理)
[self.tableView reloadData];
}];
這裡我是在點選一個按鈕彈出alert框內部可以輸入text,在我點選確定按鈕的時候進行資料儲存
資料查詢(從你儲存的裡面取出來,下一次執行程式時還能顯示在螢幕上)
請求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"YQPerson"];
NSError *error = nil;
從coredata中查詢出資料 存入一個陣列
NSArray *ps= [_context executeFetchRequest:request error:&error];
;
NSLog(@"%@",[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"YQHItList.sqlite"]);
NSLog(@"%@",ps);
if (error) {
NSLog(@"error");
}
_mutable = [NSMutableArray array];
注意二:這一步不能少,少了之後系統不能識別我們這個是什麼東西 ,必須借用一個新物件然後等價於我們這個陣列才可以進行下一步操作
[_mutable removeAllObjects];
快速查詢對應name 存入可變陣列用於介面顯示
for (YQPerson *p in ps) {
[_mutable addObject:p.name];
}
NSLog(@"%@",_mutable);
方法二怎麼自動生成的步驟就不提了 ,可以去其他帖子看一下,我這裡只是簡單做一下筆記,因為我之前做這個簡單的專案的時候遇到了比較難發現的問題: 能存進去但是取不出來
能存context save: 是成功的,但是fetch的時候就不成功了...
1.viewDidLoad中我[self fetch];操作放在了context獲取操作之前了 ,這樣就不能根據context 來獲取你儲存的東西了 記住
相關文章
- ios Coredata 關聯 UITableView 資料自動更新iOSUIView
- go 上下文:context.ContextGoContext
- oracle 手動建立ASMOracleASM
- 手動建立Oracle例項Oracle
- 手動建立資料庫資料庫
- web前端仿手機左右滑動(手滑+自動滑動)Web前端
- React的上下文-ContextReactContext
- mysql啟動與關閉(手動與自動)MySql
- 探祕 flex 上下文中神奇的自動 marginFlex
- Spring AOP 自動建立代理Spring
- 手動建立oracle資料庫Oracle資料庫
- Oracle 手動建立資料庫Oracle資料庫
- 程式中的context(上下文)Context
- eclipse 手動/自動安裝外掛Eclipse
- 記憶體自動管理與手動管理記憶體
- idea自動建立實體類Idea
- linux自動化建立補丁Linux
- 手動建立資料庫過程資料庫
- Oracle 12c 手動建立CDBOracle
- Sample Schemas建庫後手動建立
- 手動建立資料庫步驟資料庫
- drf☞jwt自動簽發與手動簽發JWT
- 使用fastlane match自動和手動管理證書AST
- 禁用Windows自動更新並允許手動更新Windows
- 自己動手寫Web自動化測試框架Web框架
- odoo context上下文用法總結OdooContext
- Golang context (上下文)是什麼GolangContext
- Sqlserver關於統計資訊自動建立自動更新的知識點SQLServer
- 手動建立系統啟動映象檔案:initrd.img
- 小程式從手動埋點到自動埋點
- 分類不能自動建立 get set 方法
- rsync 自動建立目錄的坑點
- 為Docker建立自動化nginx反向代理DockerNginx
- windows 下建立自動執行任務Windows
- mongodb怎麼手動建立資料庫MongoDB資料庫
- 使用webpack 手動建立新react專案WebReact
- Android手動建立和解析JsonAndroidJSON
- oracle手動建立另外一個例項Oracle