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



    最近看到用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>
  • 相关阅读:
    SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗
    设计表的时候,对于自增列做物理主键使用的一点思考
    MySQL慢查询日志相关的配置和使用。
    Python文件操作---合并文本文件内容
    浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
    从一个简单的约束看规范性的SQL脚本对数据库运维的影响
    (译)内存沉思:多个名称相关的神秘的SQL Server内存消耗者。
    初试Python语法小试牛刀之冒泡排序
    浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879565.html
Copyright © 2020-2023  润新知