標籤:
iPhone OS在2009年6月份推出3.0版本SDK,其中一個特性是引入了Mac SDK中的core data。是一種ORM(Object Relationships Mapping)解決方案,類似java的Hibernate。
有了這個,就不必像ios簡單sqlite使用那樣編寫繁瑣代碼了,減少工作量,也可以迴避使用c的文法,降低ios開發的技術門檻。總之,可降低開發成本,提高項目品質。
本文在很大程度上參考了《Core Data Tutorial for iOS》。
建立ios項目
為了方便,直接用xcode工具嚮導建立項目,這樣可以自動整合core data的支援。
不一定建立window-based項目,split view-based也可以,用於ipad項目,或者對於iphone的navigation-based項目亦可。
建立實體
比如java裡的執行個體需要編寫java類和對應的mapping檔案(也可能是註解)。在ios裡,需要兩步:
- 圖形介面的設計工具,設計實體、實體屬性和實體的關係
- 產生實體的類,也就是對應的.h和.m檔案
建立的項目比如叫aaa,那麼找到aaa.xcdatamodel:
雙擊它,可調出模型編輯器。建立一個Person實體。
點擊的加號建立一個新的實體(entity),然後在entity的文字框中填寫實體名稱。斷行符號就可以看到下面類似uml類圖的圖形名稱變為Person。
然後建立屬性:
點擊屬性部分的加號,選擇Add Attribute,增加一個id,數位:
然後,設定為自增列:
再設定個name屬性:
如果有多個實體,繼續建立,或者建立它們之間的關係。
然後,產生實體類,供編寫程式時調用。
建立新檔案,注意要在實體編輯器介面,可以選中Person實體,這樣產生的檔案名稱就是Person:
選擇 managed object class:
然後:
然後選中需要的實體,finish:
在項目中產生了實體類:
在代碼中使用實體
首先,需要在使用Person執行個體類的代碼標頭檔中加入:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "Person.h"
使用core data的簡單代碼,建立一個Person實體執行個體,儲存它,然後遍曆資料,相當於:select * from persons:
NSLog(@">>start app ");
Person *person=(Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[self managedObjectContext]];
[email protected]"張三";
NSError *error;
if (![[self managedObjectContext] save:&error]) {
NSLog(@"error!");
}else {
NSLog(@"save person ok.");
}
NSFetchRequest *request=[[NSFetchRequest alloc] init];
NSEntityDescription *entity=[NSEntityDescription entityForName:@"Person" inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];
ios coredata 老代碼備用參考