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

系统 1700 0

最近看到用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的使用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论