標籤:
看過一篇封裝CoreData的文章挺不錯,有基本使用封裝,但是沒有寫怎麼與tableView結合使用,我自己用的過程有些小波折,自己做了一個demo,大家可以看源碼一些基本使用應該不難了,
原文:http://blog.csdn.net/pengyuan_d/article/details/40657225?utm_source=tuicool&utm_medium=referral
(1)建立一個Data Model檔案,命名為MyModel.xcdatamodeld
(2)建立Users表,添加的欄位
(3)建立NSManagedObject subclass表實體檔案
(4)在Users.m檔案中,覆寫description方法
CoreDataDBHelper.h #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> // 本地檔案儲存體的路徑 #define PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/sqlite.db"] #define MODEL_NAME @"MyModel" @interface CoreDataDBHelper : NSObject { // 1.資料模型對象 NSManagedObjectModel *_managedObjectModel; // 2.建立本地持久檔案對象 NSPersistentStoreCoordinator *_persistentStoreCoordinator; // 3.管理資料對象 NSManagedObjectContext *_managedObjectContext; } // 設計成單例模式 + (CoreDataDBHelper *)shareCoreDataDBHelper; // 添加資料的方法 - (BOOL)insertDataWithModelName:(NSString *)modelName setAttributWithDic:(NSDictionary *)params; // 查看 /* modelName :實體物件類的名字 predicateString :謂詞條件 identifers :排序欄位集合 ascending :是否升序 */ - (NSArray *)selectDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString sort:(NSArray *)identifers ascending:(BOOL)ascending; // 修改 - (BOOL)updateDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString setAttributWithDic:(NSDictionary *)params; // 刪除 - (BOOL)deleteDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString; @end
CoreDataDBHelper.m
#import "CoreDataDBHelper.h" @implementation CoreDataDBHelper - (instancetype)init { self = [super init]; if (self) { // 1.資料模型對象 NSURL *modelUrl = [[NSBundle mainBundle] URLForResource:MODEL_NAME withExtension:@"momd"]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; // 2.建立本地持久檔案對象 _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_managedObjectModel]; // 設定本機資料的儲存位置 NSURL *fileUrl = [NSURL fileURLWithPath:PATH]; [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:fileUrl options:nil error:nil]; // 3.管理資料對象 _managedObjectContext = [[NSManagedObjectContext alloc] init]; [_managedObjectContext setPersistentStoreCoordinator:_persistentStoreCoordinator]; } return self; } // 設計成單例模式 + (CoreDataDBHelper *)shareCoreDataDBHelper { static CoreDataDBHelper *coreDataDBHelper = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ coreDataDBHelper = [[CoreDataDBHelper alloc] init]; }); return coreDataDBHelper; } // 添加資料的方法 /* params : @{ @"name":@"張三", @"age":@20 } */ - (BOOL)insertDataWithModelName:(NSString *)modelName setAttributWithDic:(NSDictionary *)params { NSEntityDescription *entity = [NSEntityDescription insertNewObjectForEntityForName:modelName inManagedObjectContext:_managedObjectContext]; // 遍曆參數字典 for (NSString *key in params) { SEL selector = [self selWithKeyName:key]; if ([entity respondsToSelector:selector]) { [entity performSelector:selector withObject:params[key]]; } } [_managedObjectContext insertObject:entity]; // 儲存到本地 return [_managedObjectContext save:nil]; } // 查看 /* modelName :實體物件類的名字 predicateString :謂詞條件 identifers :排序欄位集合 ascending :是否升序 */ - (NSArray *)selectDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString sort:(NSArray *)identifers ascending:(BOOL)ascending { // 1.建立實體物件 NSEntityDescription *entity = [NSEntityDescription entityForName:modelName inManagedObjectContext:_managedObjectContext]; // 2.建立一個查詢對象 NSFetchRequest *request = [[NSFetchRequest alloc] init]; // 告訴查詢對象你要查詢的資料類型 [request setEntity:entity]; // 添加查詢條件 if (predicateString != nil || [predicateString isEqualToString:@""]) { NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString]; [request setPredicate:predicate]; } // 3.設定排序 NSMutableArray *sortDescriptors = [NSMutableArray array]; for (NSString *identifer in identifers) { // 建立排序對象 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:identifer ascending:ascending]; // 把排序對象添加到數組中 [sortDescriptors addObject:sortDescriptor]; } // 把排序對象設定到查詢對象裡面 [request setSortDescriptors:sortDescriptors]; // 3.開始查詢 return [_managedObjectContext executeFetchRequest:request error:nil]; } // 修改 - (BOOL)updateDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString setAttributWithDic:(NSDictionary *)params { // 擷取所有需要修改實體物件 NSArray *entitys = [self selectDataWithModelName:modelName predicateString:predicateString sort:nil ascending:NO]; // 遍曆所有的實體物件 for (NSEntityDescription *entity in entitys) { // 修改對象的屬性 for (NSString *key in params) { SEL selector = [self selWithKeyName:key]; if ([entity respondsToSelector:selector]) { [entity performSelector:selector withObject:params[key]]; } } } return [_managedObjectContext save:nil]; } // 刪除 - (BOOL)deleteDataWithModelName:(NSString *)modelName predicateString:(NSString *)predicateString { // 擷取所有需要修改實體物件 NSArray *entitys = [self selectDataWithModelName:modelName predicateString:predicateString sort:nil ascending:NO]; // 遍曆所有的實體物件 for (NSEntityDescription *entity in entitys) { // 刪除對象 [_managedObjectContext deleteObject:entity]; } return [_managedObjectContext save:nil]; } // 通過一個字串反回一個set方法 - (SEL)selWithKeyName:(NSString *)keyName { NSString *first = [[keyName substringToIndex:1] uppercaseString]; NSString *end = [keyName substringFromIndex:1]; NSString *selString = [NSString stringWithFormat:@"set%@%@:",first,end]; return NSSelectorFromString(selString); } @end
iOS_SN_CoreData Demo
iOS_SN_CoreDate(一)封裝使用