最近看到用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迁移,获取当前版本>

<pre class="brush:shell; toolbar: true; auto-links: false;">



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/"



</pre>













 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:(如图)







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

<pre class="brush:objc; toolbar: true; auto-links: false;">



    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);

    }



</pre>

最新文章

  1. python模块介绍二。
  2. Linux0.11内核剖析--内核体系结构
  3. Deep_learning
  4. wcf iis host 打开exe失败 不能显示界面
  5. C# WinForm多线程(三)---- Control.Invoke[转]
  6. JavaScript入门(1)
  7. HTML基础知识笔记(一)
  8. json基础入门
  9. MySQL 数据库-索引注意事项
  10. json_encode转化为数组时带下标
  11. plsql developer无法识别32位oracle问题如何解决?
  12. CSS3-Hover 效果 展示
  13. RN中关于IOS和Android的相关权限的问题
  14. js-JavaScript实现数字的千位分隔符
  15. php 中间件
  16. 基于24位AD转换模块HX711的重量称量实验(已补充皮重存储,线性温度漂移修正)
  17. linux下修改文件权限
  18. mybatis、ibatis 和spring集成
  19. JMeter基础之-使用技巧
  20. tensorflow笔记:使用tf来实现word2vec

热门文章

  1. SpringCloud---分布式服务跟踪---Spring Cloud Sleuth
  2. Magento多语言注意事项
  3. 【Java架构:基础技术】一篇文章搞掂:Eclipse
  4. go gin
  5. 调试口:JTAG与SW-Debug Port
  6. 剑指offer第二版面试题3:二维数组中的查找(JAVA版)
  7. mysql中explain详解
  8. Feign 系列(01)最简使用姿态
  9. C# Windows服务相关
  10. 屏幕操作录制成gif图的技巧