使用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(@"没有找到要删除的对象");
}
}
使用CoreData存储数据的更多相关文章
- IOS之分析网易新闻存储数据(CoreData的使用,增删改查)
用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的. 首先: 1.网易新闻用CoreData存储了 ...
- iOS开发 - CoreData框架 数据持久化
Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还 ...
- 用python pickle库来存储数据对象
pickling有一个更常用的叫法是serialization,它是指把python对象转化成字节流byte stream, unpickling就是把byte stream转换成对象.python的 ...
- android开发之存储数据
android数据存储之SharedPreferences 一:SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配 ...
- Android应用开发SharedPreferences存储数据的使用方法
Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...
- Android使用SharedPreference存储数据
SharedPreference存储数据和文件存储更加方便的一点是可以按照一定的数据类型进行存储,同时取数据时也能够获取到相应的数据类型.它是按照map的方式来存储和读取数据的. MainActivi ...
- Android使用文件存储数据
Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...
- Fresco源码解析 - DataSource怎样存储数据
Fresco源码解析 - DataSource怎样存储数据 datasource是一个独立的 package,与FB导入的guava包都在同一个工程内 - fbcore. datasource的类关系 ...
- HashMap存储数据赋值javabean简单示例
package com.shb.web; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** ...
随机推荐
- 使用Charles对Https请求进行抓包
昨天对某个APP做分析的时候发现其请求是Https的,抓包工具不能正常的显示请求的内容及返回的情况.通过搜索发现Charles是支持针对Https抓包的.具体的操作如下: 1.电脑端安装SSL证书 2 ...
- Keil(MDK-ARM)使用教程(一)_界面+菜单
Ⅰ.概述 今天总结Keil(MDK-ARM)界面和菜单相关的内容,详情请往下看. 关于Keil的下载.安装和新建工程我已将在前面做了详细的总结,不懂的可以参考我博客里面相关的文章.该文章是在新建好工程 ...
- gen_server边缘
我们以Module代表gen_server的callback模块 1, 实现gen_server behaviour的模块会产生一个新的process么? 毫无疑问,太会了!通过调用proc_lib: ...
- plsql programming 12 集合(忽略, 个人感觉用不到)
关联数组, 嵌套表, varray 个人并不推荐使用集合, 因为操作有别于普通字段. 集合中每一个元素的数据类型都是相同的, 因此这些元素都是同质的(同质元素) 这一章的内容先忽略吧, 因为个人感觉用 ...
- Python - except不指定异常类别(转)
From:How to properly ignore Exceptions? try: doSomething() except: pass or try: doSomething() except ...
- Hibernate通过many-to-one元素的一对一映射
在hibernate中我们可以通过两种方式来执行一对一映射: 通过many-to-one元素标签 通过one-to-one元素标签 在这里,我们将通过多对一的many-to-one元素进行一对一的映射 ...
- 集合Map映射(使用xml文件)
Hibernate允许我们将Map元素与RDBMS进行映射. 我们知道,List和Map是基于索引的集合. 在map的情况下,索引列作为键,元素列用作值. 使用xml文件在集合映射中映射Map的示例 ...
- Spring4 MVC表单验证
在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS, ...
- poj 1270(dfs+拓扑排序)
题目链接:http://poj.org/problem?id=1270 思路:就是一简单的dfs+拓扑排序,然后就是按字典序输出所有的情况. http://paste.ubuntu.com/59872 ...
- socket编码问题
server.py import socket ip_port = ('127.0.0.1',9999) sk = socket.socket() sk.bind(ip_port) sk.listen ...