數據持久化(六)之Using CoreData with MagicalRecord
阿新 • • 發佈:2017-06-27
string ogg ram 默認 override term loading min save
2.創建一個Model做測試,創建一個Person的Entity
4.額外配置(取消前綴名和不打印日誌信息)
第五節裏面,我介紹了CoreData的配置和主要的增刪改查,可能非常多人會認為用它真繁瑣.這裏,我再介紹網上大神對它進行了人性化封裝的第三方MagicalRecord,正如FMDB對sqlite進行了封裝一樣,MagicalRecord讓你認為用CoreData非常方便.
@基本配置:
1.下載MagicalRecord,將裏面的MagicalRecord目錄拖入你的project
2.確定你創建的project沒有勾選"Use Core Data"
3.導入CoreData.frame框架
4.在.pch文件裏引入頭文件"CoreData+MagicalRecord.h"(僅僅能,必須在這裏引用)
@詳細操作:
1.初始化(在didFinishLaunchingWithOptions中)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; HMTRootViewController *rootVC = [[HMTRootViewController alloc] init]; self.window.rootViewController = rootVC; // 初始化 [MagicalRecord setupCoreDataStackWithStoreNamed:@"MT.sqlite"]; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. [MagicalRecord cleanUp]; }
3.增刪改查詳細操作
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 初始化一個Person對象 /** * 這裏要註意:默認,xcdatamodeld實體描寫敘述表名(name)和類名(class)必須保持一致 * 假設name和class不一致,實現MagicalRecord_MOGenerator協議中得entityName方法來改變 @implementation NSManagedObject (MagicalRecord) + (NSString *) MR_entityName; { NSString *entityName; if ([self respondsToSelector:@selector(entityName)]) { entityName = [self performSelector:@selector(entityName)]; } if ([entityName length] == 0) { entityName = NSStringFromClass(self); } return entityName; } */ Person *person = [Person MR_createEntity]; person.name = @"HMT"; person.sex = @"男"; person.age = @25; } // 加入操作 - (void)addDataOperation{ // 文檔解釋:For any entities to actually be saved / updated / deleted on disk call following method(添加,更新,刪除 都要用這種方法來保存數據) [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];; } // 查詢操作 - (void)selectDataOperation{ // find數據庫中全部的人 NSArray *peoples = [Person MR_findAll]; // find數據庫中第一條記錄 Person *firPerson = [Person MR_findFirst]; // find數據庫中全部name屬性為"HMT"的人並依照年齡age排序 NSArray *otherPeoples = [Person MR_findByAttribute:@"name" withValue:@"HMT" andOrderBy:@"age" ascending:YES]; } // 更新操作 - (void)upDataOperation{ // 選定要改動的人 NSArray *persons = [Person MR_findByAttribute:@"name" withValue:@"HMT"]; for (Person *person in persons) { person.name = @"WDQ"; } [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; } // 刪除操作 - (void)deleteDataOperation{ // delete數據庫中全部人 [Person MR_truncateAll]; [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; // 依據條件delete特定的某個人 NSArray *persons = [Person MR_findByAttribute:@"name" withValue:@"HMT"]; for (Person *person in persons) { [person MR_deleteEntity]; } [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; }
//If you want to omit the "MR_" prefix to all MagicalRecord realted method calls define following before importing the MagicalRecord header #define MR_SHORTHAND //Turn off MagicalRecord logging, again by defining following before header import #define MR_ENABLE_ACTIVE_RECORD_LOGGING 0
數據持久化(六)之Using CoreData with MagicalRecord