zoukankan      html  css  js  c++  java
  • iOS:Core Data 中的简单ORM

    前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

       


    作者:老Zhan
    出处:http://www.cnblogs.com/mybkn/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    万豪项目总结
    解决jquery animate({scrollTop$pos},500)与$(window).scroll方法冲突的问题
    一波水文来袭-让我们一起谈谈闭包【原创】
    JS模块化规范AMD之RequireJS
    JS模块化规范CMD之SeaJS
    邂逅Sass和Compass之Compass篇
    邂逅Sass和Compass之Sass篇
    idea 修改SVN账户信息
    idea 创建/加载 maven项目速度较慢
    gitlab新建分支,idea中无法找到
  • 原文地址:https://www.cnblogs.com/mybkn/p/3097034.html
Copyright © 2011-2022 走看看