一、概述

MagicalRecord 灵感来自于简洁的Ruby语言中 Rails' Active Record 查询方式. MagicalRecord 这个开源库的核心思想是:

  • 1.清除 Core Data 相关的代码
  • 2.简洁的清除,简单的一行搜索记录的功能
  • 3.当然允许使用NSFetchRequest,当存在着复杂的搜索条件时

 二、使用

1. 导入框架

将 MagicalRecord 文件夹拖入到工程文件中,引入 CoreData.frame 框架

2. 引入头文件

在 .pch 文件中引入头文件 CoreData+MagicalRecord.h

注:只能在.pch文件中引头文件,否则无法通过编译

3. 创建 Model.xcdatamodeld 文件

创建一个 Student 的 ENTITIES,最后创建出 Student 类

4. 在 Appdelete.m 文件中写以下代码

5.增删改查:

以下是增删改查的基本操作,但注意一点,在做任何的数据库操作之前,请先初始化以下,在Appdelete载入时初始化一次即可,否则找不到数据库而崩溃。

(1)设置数据库名字

[MagicalRecord setupCoreDataStackWithStoreNamed:@"Model.sqlite"];

(2)增加一条记录

Student *person = [Student MR_createEntity];
    person.name = @"Y.X.";
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

注意:创建了对象后是需要执行存储操作的

(3)查询

查询所有的记录

NSArray *students = [Student MR_findAll];

根据某个属性某个条件查询

NSArray *students = [Student MR_findByAttribute:@"name" withValue:@"Y.X."];

根据排序取得搜索结果

NSArray *students = [Student MR_findAllSortedBy:@"name" ascending:YES];

其它

查询所有记录

+ (NSArray *) MR_findAll;

根据上下文句柄查询所有记录
   + (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context;

根据某个属性排序查询所有记录
   + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;

根据某个属性排序以及上下文操作句柄查询所有记录
   + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext     *)context;

根据某个属性排序用谓词来查询记录
   + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm;

根据某个属性排序以及上下文操作句柄用谓词来查询记录
   + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;

根据谓词查询
   + (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm;

根据谓词以及上下文操作句柄来查询
   + (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;

以下都是查询一个对象时的操作,与上面重复,不一一赘述
   + (instancetype) MR_findFirst;
   + (instancetype) MR_findFirstInContext:(NSManagedObjectContext *)context;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:  (BOOL)ascending;

+ (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...;
   + (instancetype) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...;
   + (instancetype) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue;
   + (instancetype) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context;
   + (instancetype) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending;
   + (instancetype) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;

(4)修改

NSArray *students = [Student MR_findByAttribute:@"name" withValue:@"Y.X."];
    for (Student *tmp in students) {
        tmp.name = @"Jane";
    }
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

注意:既然要修改首先得需要找到记录,根据条件匹配找到记录,然后修改,然后保存

(5)删除

NSArray *students = [Student MR_findByAttribute:@"name" withValue:@"Frank"];
    for (Student *tmp in students) {
        [tmp MR_deleteEntity];
    }
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

注意:既然要删除首先得需要找到记录,根据条件匹配找到记录,然后删除,然后保存

三、心得体会

如果项目中对于操作数据库没有性能要求请使用 CoreData 相关的开源库吧.

CoreData 操作较为复杂, MagicalRecord 有着很多的特性,比如可以根据设置在主线程或者子线程中进行操作,方便快捷,能入榜最佳10大开源库自有其独到的地方,会使用 MagicalRecord 需要具备一定的 CoreData 相关知识,本人也只是现学现用,但深知其可以为开发带来的好处,使用数据库的朋友有着如下的一些选择.

1. SQLite3                 C函数形式(本人之前做过干嵌入式开发,即使是这样也不推荐使用面向过程毫无对象概念的SQLite3,有更好的方式为什么不用呢?)

2. FMDB                    对SQLite3的封装,有着对象的概念,熟悉SQ语句的朋友可以使用,但还没有做到对象与记录实时对应

3. CoreData              他做到了对象与记录实时对应关系,使用其自身的搜索体系(不用SQ语言),但其基本的操作以及配置让人望而却步

4. MagicalRecord      对 CoreData 官方的用法进行了人性化的封装,用过 CoreData 基本操作再使用 MagicalRecord 会深有体会

5. ObjectiveRecord   也是对 CoreData 的人性化封装,使用更加傻瓜,但傻瓜的代价就是牺牲了一些更强大的功能,在Github上搜索关键字即可

四、附录:

1.默认的就是在后台存储的,不会阻塞主线程

我在 CoreData+MagicalRecord.h 文件中定义了宏 MR_SHORTHAND ,所以在方法中不需要 MR_ 前缀了

以下为代码(提供block来通知存储成功,异步操作)

2.如何关闭 MagicalRecord 提供的打印信息?

修改 MagicalRecord.h 23 行处的值,把 0 改为 1 即可.

MagicRecord For IOS 简介相关推荐

  1. MagicRecord For IOS API深层解析

    一.NSManagedObjectContext创建和获取 1.默认上下文(每种只存在一个) (1)MR_rootSavingContext:此方法返回的上下文类型为NSPrivateQueueCon ...

  2. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  3. 苹果可以访问linux的smb,Samba For iOS让iPhone使用网上邻居使用体验教程

    提起微软的Samba服务大角度不会陌生吧,大家在小型局域网内对文件夹共享文件,网上邻居访问都是用的是Samba协议实现互联.SMB协议现在很常见,在Mac和Linux中都默认支持.最近,外国玩家把SM ...

  4. 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧)

    疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧) 李刚 编 IS ...

  5. 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础

    疯狂iOS 讲义(上)Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧) 李刚编 ISBN ...

  6. 如何制作自己的CocoaPod库

    作者 OneTea 关注 2016.12.29 18:02* 字数 848 阅读 102评论 0喜欢 6 制作流程图: 流程图 1.将代码托管在github上 1.1本地代码 如图: Snip2016 ...

  7. 如何使用Windows开发机为iPhone开发?

    有什么办法可以在Windows计算机上修补iPhone SDK? 是否有针对Windows的iPhone SDK版本的计划? 我可以想到的唯一另一种方法是在Windows上运行的VMWare服务器上运 ...

  8. CIW《操作系统安全》目录

    操作系统安全   第1单元:安全原则     安全原则概述     共同的安全威胁     确定适合企业的操作系统     账户安全概述     访问控制概述     安全三要素     安全策略   ...

  9. 大型企业网络设备管理

    大型企业网络-设备管理 2.1 路由器硬件概述 a) 路由器的内部组件 1. 处理器:(CPU),路由器的处理器负责执行处理包所需的工作,eg: 路由发现.路由转发以及做出路由决定等,路由器处理包的速 ...

最新文章

  1. mysql 锁语句_mysql-笔记 事务 锁 语句
  2. [恢]hdu 2117
  3. pytorch保存模型pth_Pytorch_trick_04
  4. Docker Win 10 安装
  5. 完成端口与高性能服务器程序开发
  6. Java中将16进制字符串转换成汉字
  7. 树状数组的讲解感觉挺好,和我的一维,二维,树状数组的模板,希望对大家有用
  8. 函数执行的作用域问题
  9. 常见c语言语法错误,C语言常见语法错误.doc
  10. 牛股轮回另类可能:未来的牛股在哪?
  11. 经典SQL练习题(MySQL版)
  12. [树剖]月下“毛景树”
  13. finecms aip.php漏洞,FineCMS漏洞挖掘
  14. java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...
  15. 签了工作之后才发现,自己太草率了.....我看过的关于职业规划最好最全面的一篇文章...
  16. C#编程_实现简易的任务管理器
  17. SAP ABAP 物料主数据的视图维护状态
  18. 软考高级-信息系统管理师之项目管理基础(最新版)
  19. 域名解析服务器类型(四类)
  20. 10个常用的数据分析商业模型之价值链分析模型(三)

热门文章

  1. 【UOJ 48】最大矩形面积(修正版)
  2. 如何配置Xshell连接Ubuntu
  3. ajax传递数组,后台接收为null解决方法
  4. LIBCMTD.lib与libcpmtd冲突的解决方法。
  5. 雅虎中国,奇虎全面杀入威客领域
  6. 微软研发致胜策略读书笔记(转)
  7. MySQL小问题:导入employee测试数据
  8. android ocr识别源码_身份证识别OCR解决手动输入繁琐问题
  9. linux定时器错误使用,linux下定时器的使用
  10. php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?