- (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(@"没有找到要删除的对象");

}

}

使用CoreData存储数据的更多相关文章

  1. IOS之分析网易新闻存储数据(CoreData的使用,增删改查)

    用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了 ...

  2. iOS开发 - CoreData框架 数据持久化

    Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还 ...

  3. 用python pickle库来存储数据对象

    pickling有一个更常用的叫法是serialization,它是指把python对象转化成字节流byte stream, unpickling就是把byte stream转换成对象.python的 ...

  4. android开发之存储数据

    android数据存储之SharedPreferences 一:SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配 ...

  5. Android应用开发SharedPreferences存储数据的使用方法

    Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

  6. Android使用SharedPreference存储数据

    SharedPreference存储数据和文件存储更加方便的一点是可以按照一定的数据类型进行存储,同时取数据时也能够获取到相应的数据类型.它是按照map的方式来存储和读取数据的. MainActivi ...

  7. Android使用文件存储数据

    Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...

  8. Fresco源码解析 - DataSource怎样存储数据

    Fresco源码解析 - DataSource怎样存储数据 datasource是一个独立的 package,与FB导入的guava包都在同一个工程内 - fbcore. datasource的类关系 ...

  9. HashMap存储数据赋值javabean简单示例

    package com.shb.web; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** ...

随机推荐

  1. springmvc中action跳转

    return "redirect:/activity/listactivity.htm";

  2. java过滤四字节和六字节特殊字符

    java7版本中可以这样写: source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "* ...

  3. ssh加密访问

    ssh 加密访问    telnet 开放访问需安装软件openssh-server    $ssh akaedu@192.168.103.114    $ssh 192.168.103.114 附: ...

  4. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

  5. Java进阶02 异常处理(转载)

    异常处理 Java的异常处理机制很大一部分来自C++.它允许程序员跳过暂时无法处理的问题,以继续后续的开发,或者让程序根据异常做出更加聪明的处理. Java使用一些特殊的对象来代表异常状况,这样对象称 ...

  6. 接入qq登录功能出现的问题

    在调用qq授权的接口时,出现以上错误. 原因是: 打包的应用签名和第一次上传包的签名不一致造成的 解决方法: 第一种方法:用上次打包apk的keystore重新打包apk,使签名一致. 第二种方法:联 ...

  7. java httpSession 设置超时时间

    1.设置过期时间方式一:在tomcat/conf/web.xml下加入一下内容 <session-config> <session-timeout>90</session ...

  8. MEF笔记 之延迟加载

    文章参考:在MEF中实现延迟加载部件  作者:TianFang 仅有一个服务提供者时候 using System; using System.Collections.Generic; using Sy ...

  9. hdu 1534(差分约束+spfa求最长路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...

  10. 【spring boot logback】spring boot中logback日志乱码问题

    在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码. 控制台看到打印日志乱码如下: 而日志文件打开: 记事本打开 sublime打开 ...