使用开源库MagicalRecord操作CoreData


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

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

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

3. 创建 Model.xcdatamodeld 文件,并创建一个 Student 的 ENTITIES,最后创建出 Student 类

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

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

//设置数据库名字
    [MagicalRecord setupCoreDataStackWithStoreNamed:@"Model.sqlite"];

增加

增加一条记录
    Student *person = [Student MR_createEntity];
    person.name = @"Y.X.";
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

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

查询

查询所有的记录

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;

修改

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

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

删除

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 提供的打印信息?

以下为打印信息:

2014-11-05 13:50:09.558 IM[2440:60b] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x3b50f3f8) -> Created Context UNNAMED
2014-11-05 13:50:09.566 IM[2440:60b] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x3b50f3f8) Set Root Saving Context: <NSManagedObjectContext: 0x1550b4b0>
2014-11-05 13:50:09.569 IM[2440:60b] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x3b50f3f8) Created Main Queue Context: <NSManagedObjectContext: 0x1550e2e0>
2014-11-05 13:50:09.576 IM[2440:60b] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x3b50f3f8) Set Default Context: <NSManagedObjectContext: 0x1550e2e0>

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

时间: 2024-11-08 23:12:55

使用开源库MagicalRecord操作CoreData的相关文章

开源库 MagicalRecord 操作 CoreData

原文:http://www.cnblogs.com/YouXianMing/p/3597808.html MagicalRecord  https://github.com/magicalpanda/MagicalRecord 注意:  MagicalRecord 在 ARC 下运作,Core Data 是 ORM 方案,据说带来的麻烦比好处多,且 Core Data 建立的表没有主键,但对于对数据库没有性能要求,进行简单的数据操作完全够用,能简化无数的代码量. MagicalRecord In

GitHub 上排名前 100 的 IOS 开源库简介

主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在

iOS 项目中用到的一些开源库和第三方组件

iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有更多的时间和精力能更加专注的做好自己的产品 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICKeyChainStore 存放用户账号密码组件 Reachability 监

iOS经典开源库

iOS开源库 youtube下载神器:https://github.com/rg3/youtube-dl我擦咧 vim插件:https://github.com/Valloric/YouCompleteMevim插件配置:https://github.com/spf13/spf13-vim ----------------Mac完整项目----------电台:https://github.com/myoula/sostart豆瓣FM:https://github.com/turingou/do

&lt;转&gt;iOS第三方开源库的吐槽和备忘

iOS第三方开源库的吐槽和备忘 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽. 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先整理了一份Github上排名靠前的iOS库(大概600个repos) 除了逛一下每日/每月流行之外,也可以到这里来看一下整个iOS Repos的排名. 下面是一些比较流行的第三方库: HTTP 相比

iOS第三方开源库的吐槽和备忘(转)

原文:http://www.cocoachina.com/industry/20140123/7746.html 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽. 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先整理了一份Github上排名靠前的iOS库(大概600个repos) 除了逛一下每日/每月流行之外,也可以到这里来看

iOS开源库

youtube下载神器:https://github.com/rg3/youtube-dl我擦咧 vim插件:https://github.com/Valloric/YouCompleteMevim插件配置:https://github.com/spf13/spf13-vim ----------------Mac完整项目----------电台:https://github.com/myoula/sostart豆瓣FM:https://github.com/turingou/douban.fm

iOS开发的库的列表,不完全是开源库

这个也是从他人的总结中COPY过来,加以整理的 iOS苹果官方Demo合集1.网页地址 2.官方地址 优质iOS UI/UE库:1.gitHub地址 [资源集合]94个iOS开发资源推荐 iOS开发的库的列表 项目管理和工具 测试:TestFlight 依赖管理:CocoaPods 自动生成推送证书:GeneratePushCerts AppStore统计:App Annie 单元测试:GHUnitIOS.OCMock 错误分析:Crashlytics 动态更新APP:JSPatch,WaxPa

iOS第三方开源库的吐槽和备忘

转自ibireme的博客 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽. 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先整理了一份Github上排名靠前的iOS库(大概600个repos) 除了逛一下每日/每月流行之外,也可以到这里来看一下整个iOS Repos的排名. 下面是一些比较流行的第三方库: HTTP 相比较之下