博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:Core Data 中的简单ORM
阅读量:4651 次
发布时间:2019-06-09

本文共 1709 字,大约阅读时间需要 5 分钟。

前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 
#import
@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]);    }}

 

其实之前的做法()是直接使用NSManagedObject对象去存取,现在则把它映射到对应对象里面,当然在数据库复杂的时候,其好处会体现出来。

简单的ORM in iOS就是这些。

 

参照:http://marshal.easymorse.com/archives/3377

 

转载于:https://www.cnblogs.com/mybkn/archive/2013/05/24/3097034.html

你可能感兴趣的文章