Magical Record

来源:互联网 发布:django 遍历数组前五个 编辑:程序博客网 时间:2024/06/13 00:07

回头看了一次。发现有些乱码,后来使用中有参考另外一个link. 附到这里,方便以后学习

http://www.th7.cn/Program/IOS/201501/377130.shtml


基于coredata 技术的第三方库

在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:

    <ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">#import "CoreData+MagicalRecord.h"</span></code></span></li></ol>

创建模型文件

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

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

使用Magical Record

初始化Magical Record

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

<ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">-</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">(</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(240, 230, 140); font-weight: bold;">void</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">applicationDidFinishLaunching</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSNotification</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">aNotification</span></code></span></li><li class="L1" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">{</span></code></span></li><li class="L2" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">MagicalRecord</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> setupCoreDataStackWithStoreNamed</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:@</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 160, 160);">"MyDatabase.sqlite"</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L3" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">    </span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">// ...</span></code></span></li><li class="L4" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">    </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(240, 230, 140); font-weight: bold;">return</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> YES</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">;</span></code></span></li><li class="L5" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">}</span></code></span></li><li class="L6" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"></code></span></li><li class="L7" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">-</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">(</span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(240, 230, 140); font-weight: bold;">void</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">applicationWillTerminate</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:(</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSNotification</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*)</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">aNotification</span></code></span></li><li class="L8" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">{</span></code></span></li><li class="L9" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">    </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">MagicalRecord</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> cleanUp</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">}</span></code></span></li></ol>

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

查询记录

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

<ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//查找数据库中的所有Person。</span></code></span></li><li class="L1" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSArray</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">persons </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_findAll</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L2" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"></code></span></li><li class="L3" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//查找所有的Person并按照first name排序。</span></code></span></li><li class="L4" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSArray</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">personsSorted </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_findAllSortedBy</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:@</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 160, 160);">"firstname"</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> ascending</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">YES</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L5" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"></code></span></li><li class="L6" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//查找所有age属性为25的Person记录。</span></code></span></li><li class="L7" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSArray</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">personsAgeEuqals25   </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_findByAttribute</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:@</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 160, 160);">"age"</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> withValue</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSNumber</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> numberWithInt</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">:</span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(205, 92, 92);">25</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">]];</span></code></span></li><li class="L8" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"></code></span></li><li class="L9" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//查找数据库中的第一条记录</span></code></span></li><li class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_findFirst</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li></ol>

添加记录

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

<ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_createEntity</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L1" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">.</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">firstname </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">@</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 160, 160);">"Frank"</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">;</span></code></span></li><li class="L2" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">.</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">lastname </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">@</span><span class="str" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 160, 160);">"Zhang"</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">;</span></code></span></li><li class="L3" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">.</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">age </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">@</span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(205, 92, 92);">26</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">;</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//此处使用了LLVM的新特性,XCode 4.4可用</span></code></span></li><li class="L4" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSManagedObjectContext</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_defaultContext</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">]</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_save</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li></ol>

更新记录

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

<ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">...;</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//此处略</span></code></span></li><li class="L1" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">.</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">lastname </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="kwd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(240, 230, 140); font-weight: bold;">object</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">;</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">        </span></code></span></li><li class="L2" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSManagedObjectContext</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_defaultContext</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">]</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_save</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li></ol>

删除记录

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

<ol class="linenums" style="margin: 0px; padding: 0px 0px 0px 27px; border: 0px; vertical-align: baseline; list-style-position: outside; line-height: 1.714285714; color: rgb(174, 174, 174);"><li value="1" class="L0" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">Person</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">*</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">...;</span><span class="com" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(135, 206, 235);">//此处略</span></code></span></li><li class="L1" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">person MR_deleteEntity</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li><li class="L2" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 16px; list-style: decimal;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: rgb(255, 255, 255);"><code style="margin: 0px; padding: 0px; border: none; font-size: 0.9em; vertical-align: baseline; font-family: Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace; line-height: 2; display: block;"><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">[[</span><span class="typ" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(152, 251, 152);">NSManagedObjectContext</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_defaultContext</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">]</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);"> MR_save</span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(255, 255, 255);">];</span></code></span></li></ol>

小技巧

启动时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”之前。

参考链接:

Magical Record: how to make programming with Core Data pleasant

注:这篇文章中的MagicalRecordHelpers、MRCoreDataAction都已经不在新版本的Magical Record中存在,都已经更改为MagicalRecord。

0 0
原创粉丝点击