最近看到用CoreData时使用的工具Mogenerator,发现网上介绍其具体使用的不多,特此简单整理一下,
关于CoreData这里就不具体说了,使用就用MagicalRecord,用起来真是太方便了。

关于Mogenerator

MagicalRecord是一个命令行工具,通过项目里的.xcdatamodel文件(.xcdatamodeld里面右键点击显示包内容),可以为每个entity生成    两个类,第一个是machine文件_MyEntity,会同步你的data model,第二个是human文件MyEntity,它就是你在代码中#import操作类。你不需要修改machine和human里面的任何文件,用的时候只需要在代码里#import导入human里的.h文件。

安装Mogenerator

方法一:直接从官网http://rentzsch.github.com/mogenerator/下载dmg文件安装
    方法二:用Homebrew安装,直接在终端执行brew命令:brew install mogenerator

使用Mogenerator

这里新创建一个MogDemo工程来具体说明
  1、创建一个data model文件MogModel.xcdatamodeld,并创建一个实体Person,(如图)这里要注意Person的Entity里的Class项是否是空的,保持Class项与上面的Name项一致就行了。

2、点击工程的TARGETS 一> Build Phases,点击右下角的Add Bulid Pahase,添加脚本Add Run Script (如图)

3、然后在Run Script添加script代码,注意替换相应的data model:(如图) <更新mogenerator脚本,支持data model迁移,获取当前版本>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MODELS_DIR="${PROJECT_DIR}/$PROJECT_NAME"
DATA_MODEL_PACKAGE="$MODELS_DIR/CoreDataDemoModel.xcdatamodeld"
# - 替换相应的 xxxxx.xcdatamodeld名称
 
CURRENT_VERSION=`/usr/libexec/PlistBuddy "$DATA_MODEL_PACKAGE/.xccurrentversion" -c 'print _XCCurrentVersionName'`
 
if [ -x /usr/local/bin/mogenerator ]; then
echo "mogenerator exists in /usr/local/bin path";
MOGENERATOR_DIR="/usr/local/bin";
elif [ -x /usr/bin/mogenerator ]; then
echo "mogenerator exists in /usr/bin path";
MOGENERATOR_DIR="/usr/bin";
else
echo "mogenerator not found"; exit 1;
fi
$MOGENERATOR_DIR/mogenerator -m "$DATA_MODEL_PACKAGE/$CURRENT_VERSION" -M "$MODELS_DIR/CoreData/Machine/" -H "$MODELS_DIR/CoreData/Human/"
 
# 如果是ARC工程,加上 --template-var arc=true就行了,即mogenerator命令换成:
# $MOGENERATOR_DIR/mogenerator --template-var arc=true -m "$DATA_MODEL_PACKAGE/$CURRENT_VERSION" -M "$MODELS_DIR/CoreData/Machine/" -H "$MODELS_DIR/CoreData/Human/"

4、现在可以Build工程,build成功不出意外的话就会在Finder中看到工程文件目录下生成了CoreData文件夹,CoreData下的Human是Person.h/Person.m,Machine里是 _Person.h/_Person.m (如图)

5、在Xcode中将生成的CoreData添加到工程里,右键Add Files "MogDemo" (如图)


最后在代码中#import "Person.h"就可以使用了,如果在.xcdatamodeld为Entity添加属性,添加之后直接Bulid下,就可以在代码里直接使用了。例如给Person添加一个属性phone:(如图)



补充一条,如果项目使用了ARC,mogenerator 命令需要加上 --template-var arc=true

这里有mogenerator的详细命令介绍
http://stackoverflow.com/questions/3589247/how-do-the-mogenerator-parameters-work-which-can-i-send-via-xcode

http://www.cocoachina.com/bbs/read.php?tid=143640

还有,对于NSNumber类型属性,可以直接像下面一样使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Person *person = [Person createEntity];
    person.name = @"WWDC2012";
    //person.age = [NSNumber numberWithShort:16];
     
    //现在像NSNumber属性赋值(取值)就可以直接这样:
    person.ageValue = 12;
     
    [[NSManagedObjectContext defaultContext] saveToPersistentStoreAndWait];
     
    NSArray *arr = [Person findAll];
    for (Person *newPerson in arr) {
         
        NSLog(@"age=:%d",newPerson.ageValue);
    }
 

(转)关于CoreData的一个工具Mogenerator的使用的更多相关文章

  1. 关于CoreData的一个工具Mogenerator的使用

    最近看到用CoreData时使用的工具Mogenerator,发现网上介绍其具体使用的不多,特此简单整理一下, 关于CoreData这里就不具体说了,使用就用MagicalRecord,用起来真是太方 ...

  2. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  3. 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现

    1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...

  4. 通过一个工具类更深入理解动态代理和Threadlocal

    动态代理和Threadlocal 一个代理类返回指定的接口,将方法调用指定的调用处理程序的代理类的实例.返回的是一个代理类,由指定的类装载器的定义和实现指定接口指定代理实例调用处理程序最近用到一个工具 ...

  5. 用Java开发一个工具类,提供似于js中eval函数功能的eval方法

    今天在看到<Java疯狂讲义>中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能--可以动态运行一行或多行程序代码.例如: ...

  6. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)

    打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...

  7. Timber(对Log类封装的一个工具)

    Timber(对Log类封装的一个工具) https://blog.csdn.net/hzl9966/article/details/51314137 https://www.jianshu.com/ ...

  8. 在Android系统中修改Android.mk使其同时编译rgb2565和rgb2888(向out/host/linux-x86/bin/下新增加一个工具命令)【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7514559 在Android系统中修改android.mk使其同时编译rgb2565和rgb ...

  9. 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?

    答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查

随机推荐

  1. python获取外网地址

    # coding=gbk import sys,urllib.request,re url = "http://www.3322.org/dyndns/getip" #网页地址 m ...

  2. Internet Explorer for Mac the Easy Way: Run IE 7, IE8, & IE9 Free in a Virtual Machine

        From link: http://osxdaily.com/2011/09/04/internet-explorer-for-mac-ie7-ie8-ie-9-free/ If you’re ...

  3. 函数flst_remove

    移除 node, node->prev直接指向node->next /*********************************************************** ...

  4. iOS开发:Swift多线程NSThread的使用

    一:创建线程,NSThread创建线程常用的三种方式: //1:手动创建启动 let thread:NSThread = NSThread(target: self, selector:"d ...

  5. build path功能详解

    在项目上右键>Build path>Config build path “web project”中,一般把"src"设置为source folder,把WEB-INF ...

  6. UVa 11178 (简单练习) Morley's Theorem

    题意: Morley定理:任意三角形中,每个角的三等分线,相交出来的三个点构成一个正三角形. 不过这和题目关系不大,题目所求是正三角形的三个点的坐标,保留6位小数. 分析: 由于对称性,求出D点,EF ...

  7. BZOJ2429: [HAOI2006]聪明的猴子

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2429 题解:从某一点遍历n个点,且使最长边最短,就是MST了. 代码: #include< ...

  8. 微信分享自定义图片标题摘要-微信官方API

    我们平时在使用微信内置浏览器打开网页想要分享给好友或者发到朋友圈的时候经常会遇到这样的问题, 别人的网页分享的时候是这样的: 而我们自己的网页分享后这这样的: 看到有人说不做任何设置,微信分享时会自动 ...

  9. 使用mp4v2将H264+AAC合成mp4文件

    录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是: (1)接收并解析RTP包,分离出H264和AAC数据流: (2)将H26 ...

  10. 【Java集合框架】规则集--Set

    集合: Java主要支持三种: 1.规则集(Set) 用于存储一组不重复的元素 2.线性表(List) 用于存储一个由元素构成的有序集合 3.队列(Queue) 同与数据结构中的队列,存储用先进先出的 ...