数据持久化(六)之Using CoreData with MagicalRecord

最后更新于:2022-04-01 22:58:51

第五节里面,我介绍了CoreData的配置和基本的增删改查,可能很多人会觉得用它真繁琐.这里,我再介绍网上大神对它进行了人性化封装的第三方MagicalRecord,正如FMDB对sqlite进行了封装一样,MagicalRecord让你觉得用CoreData很方便.       @基本配置:          1.下载[MagicalRecord](https://github.com/magicalpanda/MagicalRecord),将里面的MagicalRecord文件夹拖入你的工程          2.确定你创建的工程没有勾选"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]; } ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-11_569358af50e68.jpg)           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]; } ~~~           4.额外配置(取消前缀名和不打印日志信息) ~~~ //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 ~~~            @以上只是一些基本操作,其他可以自己去查看头文件
';