前2天在微博看到劉鑫等人對Android和iOS上資料庫儲存的ORM(對象關係映射,即把資料庫映射到對象)的討論。自己項目中需要儲存的資料大多比較簡單,所以無論是Android還是iOS都沒有使用ORM的相關東西。其實Core Data的一大特性就是對ORM的處理。
我們首先在xcdatamodel檔案中設計我們的資料庫:例如我建立一個Data的實體,裡面有一個String類型的屬性name以及一個Integer類型的num:
然後選中Data,添加檔案,選擇NSManagedObject subclass類型:
xcode就會自動幫我們的資料庫自動對應出對象了,產生Data.h Data.m檔案,Data為 NSManagedObject派生的子類,
#import <Foundation/Foundation.h>#import <CoreData/CoreData.h>@interface Data : NSManagedObject@property (nonatomic, retain) NSString * name;@property (nonatomic, retain) NSNumber * num;@end
#import "Data.h"@implementation Data@dynamic name;@dynamic num;@end
我們在需要用到儲存CoreData的地方,直接使用Data對象就行,當然,你需要import Data.h 先,例如我demo的代碼:
-(void) saveDataWithName:(NSString *) Name andNum:(int ) Num{ AppDelegate *appDelegate=[[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = appDelegate.managedObjectContext; //save Data Data *data = [NSEntityDescription insertNewObjectForEntityForName:@"Data" inManagedObjectContext:context]; data.name = Name; data.num = [NSNumber numberWithInt:Num]; [appDelegate saveContext]; //get Data NSError *error; NSFetchRequest *request=[[NSFetchRequest alloc] init]; NSEntityDescription *entity=[NSEntityDescription entityForName:@"Data" inManagedObjectContext:context]; [request setEntity:entity]; NSArray *results=[[context executeFetchRequest:request error:&error] copy]; for (Data *d in results) { NSLog(@">> date.name: %@ data.num: %i",d.name,[d.num intValue]); }}
其實之前的做法(iphone開發中的資料存放區:Core Data)是直接使用NSManagedObject對象去存取,現在則把它映射到對應對象裡面,當然在資料庫複雜的時候,其好處會體現出來。
簡單的ORM in iOS就是這些。
參照:http://marshal.easymorse.com/archives/3377