首先來看一下iOS的數據持久化的存儲方式都有哪幾類?分別適用于什么場合?
1).XML屬性列表(Property List 常簡稱為Plist)
適用場合:只能存儲OC常用數據類型(NSString、NSDictionary、NSArray、NSData、NSNumber等類型),而不能直接存儲自定義模型對象
2).偏好設置:保存比較簡單的用戶信息,NSUserDefaults是個單例類,用于存儲少量數據。NSUserDefaults實際上對plist文件操作的封裝,更方便我們直接操作,一般用于存儲系統級別的偏好設置。比如我們經常將登錄后的用戶的一些設置(比如UserName和PassWord)通過NSUserDefaults存儲到plist文件中。
3).對象歸檔:保存自定義的對象,一次性存儲(遵守協議 實現方法) 大批量數據效果不太好.自定義對象應用范圍很廣,因為它對應著MVC中的Model層,即實體類。對自定義對象的歸檔顯得重要的多,因為很多情況下我們需要在Home鍵之后保存數據,在程序恢復時重新加載,歸檔是一個好的選擇.
4).SQLite:輕型的嵌入式關系型數據庫(主要做緩存:就是當用戶打開界面時,顯示的不是空白) ,它占用資源非常的低,只能放在在手機里
5).CoreData
CoreData是對SQLite的封裝,面向過程(沒有sql語句),對存儲方式的封裝,可以讓用戶在不關心數據的情況在對數據進行增刪改查的操作.
Core Data是iOS5之后才出現的一個框架,它提供了對象-關系映射(ORM)的功能,即能夠將OC對象轉化成數據,保存在SQLite數據庫文件中,也能夠將保存在數據庫中的數據還原成OC對象。在此數據操作期間,不需要編寫任何SQL語句.
首先創建一個數據庫
//設置成員變量
@property (nonatomic, strong) NSManagedObjectContext *context;
@property (nonatomic, strong) NSArray *allDatas;
//NSPersistentStoreCoordinator
//持久化存儲小助手 (負責創建數據庫)
//操作權限 上下文 (負責增刪改查)
NSManagedObjectContext *context = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
self.context = context;
//指定一個持久化存儲小助手 創建數據庫
//告訴小助手創建一個怎樣的數據庫
NSString *path = [[NSBundle mainBundle]pathForResource:@"_coreData" ofType:@"momd"];
//管理器對象的模型 參數1 url 路徑
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path]];
NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:managedObjectModel];
//沙盒路徑
NSString *pathDatabase = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"coreData.sqlite"];
[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:pathDatabase] options:nil error:nil];
context.persistentStoreCoordinator = persistentStoreCoordinator;
macdown
//有了上下文 有了小助手
//創建一個實體 有Police的信息姓名 身高 體重屬性
NSLog(@"%@",pathDatabase);
向實體(數據表)添加數據
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XSPolice" inManagedObjectContext:self.context];
XSPolice *police = [[XSPolice alloc]initWithEntity:entityDescription insertIntoManagedObjectContext:self.context];
police.name = [NSString stringWithFormat:@"張三-%zd",i];
police.height = @(1.8);
police.weight = @(80);
[self.context save:nil];