zoukankan      html  css  js  c++  java
  • 使用CoreData存储数据

    - (void)viewDidLoad {

        [super viewDidLoad];

        //获取模型文件的路径

        NSString *path=[[NSBundle mainBundle]pathForResource:@"Cart" ofType:@"momd"];

        //利用模型文件创建被管理模型对象

        NSManagedObjectModel *managedObjectModel=[[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path]];

        //创建持久化存储协调器对象

        NSPersistentStoreCoordinator *persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:managedObjectModel];

        //指定持久化存储文件的路径

        NSString *dbPath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/cart1.sqlite"];

        //添加一个持久化存储对象,第1个参数指存储的类型,url:指持久化存储的文件路径

        [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dbPath] options:nil error:nil];

        //初始化对象

        _managedObjectContext=[[NSManagedObjectContext alloc]init];

        _managedObjectContext.persistentStoreCoordinator=persistentStoreCoordinator;

        

        //[self addData];

        //[self updateData];

        [self deleteDataByID:2];

        [self displayAllData];

    }

    //向数据文件中添加数据

    -(void)addData

    {

        //根据模型图中的模型名获取新的实例对象

        Customer *customer=[NSEntityDescription insertNewObjectForEntityForName:@"Customer" inManagedObjectContext:_managedObjectContext];

        customer.customerID=[NSNumber numberWithInt:2];

        customer.userName=@"zhangsan";

        customer.password=@"11111";

        

        ShoppingCartMaster *master=[NSEntityDescription insertNewObjectForEntityForName:@"ShoppingCartMaster" inManagedObjectContext:_managedObjectContext];

        master.cartID=[NSNumber numberWithInt:2000];

        master.customerID=[NSNumber numberWithInt:2];

        

        ShoppingCartDetail *detail1=[NSEntityDescription insertNewObjectForEntityForName:@"ShoppingCartDetail" inManagedObjectContext:_managedObjectContext];

        detail1.cartID=[NSNumber numberWithInt:2000];

        detail1.productID=[NSNumber numberWithInt:12];

        detail1.productName=@"iphone5";

        detail1.price=[NSDecimalNumber decimalNumberWithString:@"4000"];

        

        ShoppingCartDetail *detail2=[NSEntityDescription insertNewObjectForEntityForName:@"ShoppingCartDetail" inManagedObjectContext:_managedObjectContext];

        detail2.cartID=[NSNumber numberWithInt:2000];

        detail2.productID=[NSNumber numberWithInt:23];

        detail2.productName=@"iphone6";

        detail2.price=[NSDecimalNumber decimalNumberWithString:@"5000"];

        

        customer.cart=master;

        [master addDetailObject:detail1];

        [master addDetailObject:detail2];

        

        //如果用户对数据做了修改

        if([_managedObjectContext hasChanges]){

            //进行持久化存储到文件中

            BOOL ret=[_managedObjectContext save:nil];

            if(ret){

                NSLog(@"add successed!");

            }

        }

    }

    //显示数据

    -(void)displayAllData

    {

        //进行数据查询请求的对象,参数指要查询的模型实体名

        NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:@"Customer"];

        NSString *name=@"Qianfeng";

        //设置谓词对象(可以用于对数据记录筛查)

        NSPredicate *predicate;

        //精确匹配查找

        //predicate=[NSPredicate predicateWithFormat:@"userName=%@",name];

        //模糊查找,查询以name中的字符串开始,不区分大小写的记录

        predicate=[NSPredicate predicateWithFormat:@"userName like [cd] %@",[NSString stringWithFormat:@"%@*",name]];

        //设置请求中的谓词对象(筛查条件)

        //request.predicate=predicate;

        //在被管理对象上下文中执行查询请求,返回该模型对象数组

        NSArray *result=[ _managedObjectContext executeFetchRequest:request error:nil];

        for(Customer *cus in result){

            //获取其cart属性

            ShoppingCartMaster *master=cus.cart;

            NSLog(@"customerID:%@,userName:%@,password:%@,cartID:%@",cus.customerID,cus.userName,cus.password,master.cartID);

            //获取其详情,NSSet类型,转换为NSArray

            NSArray *array=[master.detail allObjects];

            //显示该customer的cart中所有的product

            for(ShoppingCartDetail *detail in array){

                NSLog(@"pid:%@,pname:%@,price:%@",detail.productID,detail.productName,detail.price);

            }

        }

    }

    -(void)updateData

    {

        NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:@"Customer"];

        NSPredicate *predicate=[NSPredicate predicateWithFormat:@"customerID=2"];

        request.predicate=predicate;

        //查询出需要修改的对象

        NSArray * result=[_managedObjectContext executeFetchRequest:request error:nil];

        if(result.count>0){

            //取出需要修改的对象,直接对其属性值进行修改

            Customer *customer=result[0];

            customer.userName=@"lisi";

            if([_managedObjectContext hasChanges]){

                if([_managedObjectContext save:nil]){

                    NSLog(@"update ok!");

                }

            }

        }else{

            NSLog(@"没有找到需要修改的记录!");

        }

    }

    //根据id删除某条记录

    -(void)deleteDataByID:(int)cid

    {

        //查找要删除的记录对象

        NSFetchRequest *request=[[NSFetchRequest alloc]initWithEntityName:@"Customer"];

        NSPredicate *predicate=[NSPredicate predicateWithFormat:@"customerID=%d",cid];

        request.predicate=predicate;

        NSArray *array=[_managedObjectContext executeFetchRequest:request error:nil];

        if(array.count>0){

            //取出要删除的对象

            Customer *customer=array[0];

            //在当前被管理对象上下文中删除对象

            [_managedObjectContext deleteObject:customer];

            if([_managedObjectContext hasChanges]){

                if([_managedObjectContext save:nil]){

                    NSLog(@"delete successed!");

                }else{

                    NSLog(@"delete error!");

                }

            }

        }else{

            NSLog(@"没有找到要删除的对象");

        }

    }

    http://www.cnblogs.com/PaulpauL/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    转:va_list、va_start、va_arg、va_end的原理与使用
    学习Docker的记录
    Google Code 优秀的开源工具
    转载(程序在内存中运行的奥秘)
    C# 和 Java 之争之我见
    揭秘ASP.NET 2.0的Eval方法(转)
    IIS6.0 架构(二)
    IE6 position:fixed bug (固定窗口方法)(转载)
    用FileStream上传图片转换成二进制,在本地用行,传到服务器上去出现如下错误
    异常处理
  • 原文地址:https://www.cnblogs.com/PaulpauL/p/4935142.html
Copyright © 2011-2022 走看看