ios中coredata
http://blog.csdn.net/q199109106q/article/details/8563438
//
// MJViewController.m
// 数据存储5-Core Data
//
// Created by mj on 13-4-16.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import "MJViewController.h"
#import <CoreData/CoreData.h>
#import "NSString+File.h"
#import "Person.h" @interface MJViewController ()
@property (nonatomic, retain) NSManagedObjectContext *context;
@end @implementation MJViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 初始化上下文对象
[self initContext]; // 插入数据
//[self addData];
//[self addPerson]; // 删除数据
//[self deleteData]; // 查询数据
[self findPerson]; // 更改数据
//[self updateData];
} - (void)dealloc {
[_context release];
[super dealloc];
} #pragma mark 查询数据
- (void)findPerson {
// 初始化查询对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; NSArray *array = [self.context executeFetchRequest:request error:nil]; for (Person *person in array) {
NSLog(@"name=%@,age=%@", person.name, person.age);
}
} #pragma mark 插入数据
- (void)addPerson {
// 初始化一个跟上下文关联的对象
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context]; person.name = @"mj";
person.age = [NSNumber numberWithInt:]; [self.context save:nil];
} #pragma mark 删除数据
- (void)deleteData {
// 初始化查询对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 设置条件过滤 where age < 50
request.predicate = [NSPredicate predicateWithFormat:@"age < %i", ]; NSArray *array = [self.context executeFetchRequest:request error:nil]; for (NSManagedObject *person in array) {
// 删除掉的person对象就不会跟context关联了
[self.context deleteObject:person];
} // 将所有跟上下文相关联的对象同步到数据库
[self.context save:nil];
} #pragma mark 查询数据
- (void)updateData {
// 初始化查询对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 设置条件过滤 where age > 20
request.predicate = [NSPredicate predicateWithFormat:@"age > %i", ]; NSArray *array = [self.context executeFetchRequest:request error:nil]; for (NSManagedObject *person in array) {
[person setValue:[NSNumber numberWithInt:] forKey:@"age"];
} // 将所有跟上下文相关联的对象同步到数据库
[self.context save:nil];
} #pragma mark 查询数据
- (void)findData { // 初始化查询对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 按照age降序
NSSortDescriptor *desc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO]; request.sortDescriptors = [NSArray arrayWithObject:desc]; // 设置条件过滤 where age > 20
//request.predicate = [NSPredicate predicateWithFormat:@"age > %i", 20]; // name like '%j-1%'
//request.predicate = [NSPredicate predicateWithFormat:@"name like %@", @"*j-1*"]; NSArray *array = [self.context executeFetchRequest:request error:nil]; for (NSManagedObject *person in array) {
NSString *name = [person valueForKey:@"name"]; int age = [[person valueForKey:@"age"] intValue]; NSLog(@"name=%@,age=%i", name, age);
} } #pragma mark 插入数据
- (void)addData {
//[[NSManagedObject alloc] initWithEntity:<#(NSEntityDescription *)#> insertIntoManagedObjectContext:<#(NSManagedObjectContext *)#>]; for (int i = ; i<; i++) {
// 初始化一个跟上下文关联的对象
NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context]; // 设置对象的属性
[person setValue:[NSNumber numberWithInt:+i] forKey:@"age"];
NSString *name = [NSString stringWithFormat:@"mj-%i", i];
[person setValue:name forKey:@"name"];
} // 将所有跟上下文相关联的对象同步到数据库
[self.context save:nil];
} #pragma mark 初始化上下文对象
- (void)initContext {
// 1.加载模型文件
// nil代表从应用程序主bundle里面加载模型文件
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil] ; // 2.初始化持久化存储调度器
NSPersistentStoreCoordinator *store = [[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model] autorelease]; // 添加持久化存储库(这里用数据库存储)
NSString *path = [@"coredata.db" documentsAppend]; NSURL *url = [NSURL fileURLWithPath:path]; // 一定要给指针赋值
NSError *error = nil;
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; if (error) {
NSLog(@"打开数据库失败:%@", [error localizedDescription]);
return;
} // 3.初始化上下文对象
self.context = [[[NSManagedObjectContext alloc] init] autorelease];
self.context.persistentStoreCoordinator = store;
} @end
下面是面向模型
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "Person.h"
#import "Car.h"
@interface ViewController () @property(nonatomic,retain)NSManagedObjectContext *context;
@end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. //从应用程序加载模型文件
NSManagedObjectModel *model=[NSManagedObjectModel mergedModelFromBundles:nil];
//传入模型对象,初始化NSPersistentStoreCoordinator对象
NSPersistentStoreCoordinator *psc=[[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model] autorelease];
//构建sqlite数据库文件的路径
NSString *docs=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSURL *url=[NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"person.db"]];
NSError *error=nil; if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]) { //[NSException raise:@"创建数据库失败" format:@"%@",[error localizedDescription]];
NSLog(@"创建数据库失败-->%@",[error localizedDescription]);
} self.context=[[NSManagedObjectContext alloc] init];
self.context.persistentStoreCoordinator=psc;
[_context release]; } - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)addclick:(id)sender {
Person *person=[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context];
person.name=@"gcb111";
person.age=@; Car *car=[NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.context];
//[car setValue:@"123456789456" forKey:@"no"];
car.no=@"ssss111111"; car.person=person; NSError *error=nil;
[self.context save:&error];
if(error){
NSLog(@"-->同步失败-->%@",error.localizedDescription);
}
else{
NSLog(@"--->同步成功-->");
}
} - (IBAction)selectClick:(id)sender { //创建查询请求
NSFetchRequest *request=[[NSFetchRequest alloc] init];
//获取请求的实体
request.entity=[NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.context];
NSSortDescriptor *sort=[[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
request.sortDescriptors=@[sort];
NSError *error=nil;
NSArray *arr=[self.context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"-->查询失败-%@",error.localizedDescription);
return;
}
for (Person *p in arr) {
NSLog(@"-->%@-->%@",p.name,p.age);
} } - (IBAction)UpdateClick:(id)sender {
NSArray *arr=[self queryByAge:];
for (Person *p in arr) {
p.age=@;
}
NSError *error=nil;
[self.context save:&error];
if (error) {
NSLog(@"-->失败-%@",error); }
} - (IBAction)DelClick:(id)sender { NSArray *arr=[self queryByAge:];
for (Person *p in arr) {
[self.context deleteObject:p];
}
NSError *error=nil;
[self.context save:&error];
if (error) {
NSLog(@"-->失败-%@",error); }
} -(NSArray *)queryByAge:(int)age{
NSFetchRequest *request=[[NSFetchRequest alloc] init];
request.entity=[NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.context]; NSPredicate *predicate=[NSPredicate predicateWithFormat:@"age=%i",age];
request.predicate=predicate;
NSError *error=nil;
NSArray *arr=[self.context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"-->查询失败-%@",error.localizedDescription);
return nil;
}
return arr;
}
ios中coredata的更多相关文章
- IOS中CoreData浅析
CoreData简介: 什么是CoreData? Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中, ...
- iOS 中CoreData的简单使用
原文链接:http://www.jianshu.com/p/4411f507dd9f 介绍:本文介绍的CoreData不在AppDelegate中创建,在程序中新建工程使用,即创建本地数据库,缓存数据 ...
- iOS中coreData的用法
// // ViewController.m // coredatademo002 // // Created by ganchaobo on 13-6-29. // Copyright (c) 20 ...
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
- QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData
SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...
- iOS中的数据持久化方式
iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...
- iOS 中有用的开源库
youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...
- iOS中常用的四种数据持久化技术
iOS中的数据持久化方式,基本上有以下四种:属性列表 对象归档 SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults st ...
- iOS中常用的四种数据持久化方法简介
iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...
随机推荐
- Visio中方向键不能移动物件而是滚动画布
不知怎么的, 我的Visio中按方向键不能移动目标对象, 效果却是移动整个画布. 上网查了一下, 找到了原因. 因为不知怎么的错按了键盘上的Scroll Lock键, 再按一下就好了. 参考资 ...
- Entity Framework 与 LINQ to SQL
Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 ...
- 异常捕获 崩溃 Bugly ACRC 简介 总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android -- SpannableString
SpannableString Android通过SpannableString类来对EditText和TextView的指定文本进行处理. ForegroundColorSpan 文本颜色 priv ...
- Angularjs 中的 controller
接触过程序开发的小伙伴们对 MVC 的开发方式想必一点也不陌生,是的, angularjs 所採用的方式便是 MVVM 的开发方式,这里的 controller 即控制器 了解 controller ...
- iOS 两个应用之间的切换
A 跳到B NSURL *urlT = [NSURL URLWithString:@"TestB://XXXXXXX"]; //注意“://”后面可以任意传参数.这些参数传过去后当 ...
- JavaScript如何根据当天算出前三天和后三天
经杨秀徐批准 中央军委颁发意见建设新型司令机关news 杨秀徐会见到北京述职的香港特首梁振英news 海军372潜艇官兵先进事迹报告会举行 杨秀徐作指示news 中央农村工作会议在京召开 李克强作重要 ...
- SQL Server查看被锁的表 - dead lock
select str(request_session_id ,4 ,0) as SPID ,convert(varchar(20) ,db_name(resource_database_id)) as ...
- GDB和GDB Server
gdb是linux c编程标配的调试工具,平时接触比较多的可能是本机随gcc一起安装的调试工具.但是,即使是本机的gdb,也经常被printf代替,所以接触也仅限于知道. 简单程序固然可以用print ...
- Python学习笔记二:函数式编程
1:Python中,内置函数名相当于一个变量,指向内置函数.所以可以通过函数名调用相应函数,也可以给函数名赋值,改变它的内容,如:可以把另一个函数变量赋值给它,那它就指向了所赋值的函数了. 2:高级函 ...