数据持久化(六)之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
~~~
@以上只是一些基本操作,其他可以自己去查看头文件
';