最近看到用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);
????
}
?
|
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
