• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

MagicalRecord入门教程

阅读数:次 2015-01-05
字数统计: 867字   |   阅读时长≈ 3分

Magical Record是什么

在Cocoa中存在一种技术叫Core Data,用来对数据进行持久化,类似于Java世界中的Hibernate。在新建Cocoa Application/iOS Application的向导中,有一个选项是要不要使用Core Data,当启用以后你会发现在AppDelegate.m中添加了大量与Core Data相关的代码,但是你对大部分代码不知所以然。


Magical Record的出现在一定程度上缓解了这个问题,降低了Core Data的使用门槛。

Magical Record借用了Ruby on Rails中的Active Record模式,使得你可以非常容易的添加、查找、删除数据。Google了一下,没有发现中文相关教程,遂把自己的试用过程记录下来,写成此篇文章。

安装

  1. 新建一个项目,注意在向导中不要勾选Core Data。

  2. 下载Magical Record,并把MagicalRecord目录拖拽到工程中,记得勾选copy items into group folder。

  3. 为项目添加CoreData FrameWork。(点击工程根节点,然后依次Targets > Build Phases > Link Binary With Libraries > + > CoreData.framework > Add)

  4. 添加Magical Record的头文件到*-Prefix.pch:(再创建pch,添加#import <MagicalRecord/MagicalRecord.h>)

      1.  #import <MagicalRecord/MagicalRecord.h>
    

创建模型文件

下面创建一个名为Person的模型,有age、firstname、lastname三个字段

  1. 创建一个名为Model的模型文件。 (File > New File… > Core Data > Data Model)
    点击左下角的Add Entity,更改Entity的名字为Person。
  2. 为Entity添加三个Attribute:age(Integer16)、firstname(string)、lastname(string)
  3. 点击Editor > Create NSManagedObject Subclass… > Create创建模型文件对应的类

使用Magical Record

初始化Magical Record

首先在AppDelegate.m中添加以下代码对Magical Record进行初始化:

   - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
     {
        [MagicalRecord setupCoreDataStackWithStoreNamed:@"MyDatabase.sqlite"];
        // ...
        return YES;
     }
  - (void)applicationWillTerminate:(NSNotification *)aNotification
     {
        [MagicalRecord cleanUp];
     }
     

是否比Core Data默认的初始化简洁多了呢?

查询记录

使用Person的MR_findAll、MR_findAllSortedBy、MR_findByAttribute等方法可以查询Person:

      //查找数据库中的所有Person。
      NSArray *persons = [Person MR_findAll];
      //查找所有的Person并按照first name排序。
      NSArray *personsSorted = [Person MR_findAllSortedBy:@"firstname" ascending:YES];
      //查找所有age属性为25的Person记录。
      NSArray *personsAgeEuqals25   = [Person MR_findByAttribute:@"age" withValue:[NSNumber numberWithInt:25]];
     //查找数据库中的第一条记录
      Person *person = [Person MR_findFirst];
      

添加记录

使用Person的MR_createEntity方法可以方便的创建一个Person,需要使用[[NSManagedObjectContext MR_defaultContext] MR_save]来进行保存哦:

    Person *person = [Person MR_createEntity];
    person.firstname = @"Frank";
    person.lastname = @"Zhang";
    person.age = @26;//此处使用了LLVM的新特性,XCode 4.4可用
   [[NSManagedObjectContext MR_defaultContext] MR_save];
   

更新记录

直接对数据库中查找到的Person进行赋值,然后使用NSManagedObjectContext保存即可更新Person:

     Person *person = ...;//此处略
     person.lastname = object;        
    [[NSManagedObjectContext MR_defaultContext] MR_save];          

删除记录

使用Person的MR_deleteEntity可以方便的删除Person,模式和添加更新一致:

    Person *person = ...;//此处略
    [person MR_deleteEntity];
    [[NSManagedObjectContext MR_defaultContext] MR_save];
    

小技巧

启动时MR_mergedObjectModelFromMainBundle方法报错

Core Data的模型有版本的概念,有可能在你Magical Record第一次初始化完成以后,你又更改了模型文件,导致Core Data去合并模型报错。解决办法很简单,点击菜单中的Project->Clean即可

项目使用ARC后,编译Magical Record不通过

点击项目 -> Build Phases -> Compile Sources中, 双击报错的class文件, 编辑Compiler Flags加入 -fno-objc-arc

不想使用MR_前缀

只需要在*-Prefix.pch文件中添加一句#define MR_SHORTHAND即可,注意这句要在#import “CoreData+MagicalRecord.h”之前


#### 注:这篇文章中的MagicalRecordHelpers、MRCoreDataAction都已经不在新版本的Magical Record中存在,都已经更改为MagicalRecord。
  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2015/01/05/MagicalRecord入门教程/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • OC

扫一扫,分享到微信

JSON和模型之间转换iOS框架:MJExtension
在Xcode中添加多个targets进行版本控制
  1. 1. Magical Record是什么
  2. 2. 安装
  3. 3. 创建模型文件
  4. 4. 使用Magical Record
    1. 4.0.1. 初始化Magical Record
  5. 4.1. 查询记录
  6. 4.2. 添加记录
  7. 4.3. 更新记录
  8. 4.4. 删除记录
  9. 4.5. 小技巧
    1. 4.5.1. 启动时MR_mergedObjectModelFromMainBundle方法报错
    2. 4.5.2. 项目使用ARC后,编译Magical Record不通过
    3. 4.5.3. 不想使用MR_前缀
© 2014-2024 Grx
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 标签
  • 友链
  • 关于我

tag:

  • life
  • OC
  • Google
  • Fastlane
  • Flutter
  • hexo
  • 智能家居
  • Apple Watch
  • 逆向
  • Lottie
  • PHP
  • cocos2d
  • Mac
  • MonkeyKing
  • RN
  • Swift
  • RAC
  • WKWebView
  • WebView
  • Xcode
  • xcode
  • ios
  • Android
  • appledoc
  • MMKV
  • LLVM
  • FreamWork






    
    

  • 唐巧的博客
  • 王巍(喵神)OneVsDen
  • 阿里“念纪“
  • 滴滴-戴铭
  • 郭曜源(ibireme)
  • 阿里”南栀倾寒“
  • 蘑菇街李忠
  • 码农人生
  • 玉令天下
  • bang
  • Ian的博客
这里是Grx的个人博客:
iOS开发工程师一枚
联系方式:
QQ:1217255509
Email:grx0917@sina.com
知识管理,时间管理,自我管理,架构即未来
欢迎技术交流!