您的位置:首页 > 移动开发 > IOS开发

ios中coredata

2013-09-25 20:59 141 查看
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:10];

[self.context save:nil];
}

#pragma mark 删除数据
- (void)deleteData {
// 初始化查询对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

// 设置条件过滤 where age < 50
request.predicate = [NSPredicate predicateWithFormat:@"age < %i", 50];

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", 20];

NSArray *array = [self.context executeFetchRequest:request error:nil];

for (NSManagedObject *person in array) {
[person setValue:[NSNumber numberWithInt:50] 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 = 0; i<10; i++) {
// 初始化一个跟上下文关联的对象
NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context];

// 设置对象的属性
[person setValue:[NSNumber numberWithInt:20+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=@231;

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:15];
for (Person *p in arr) {
p.age=@16;
}
NSError *error=nil;
[self.context save:&error];
if (error) {
NSLog(@"-->失败-%@",error);

}
}

- (IBAction)DelClick:(id)sender {

NSArray *arr=[self queryByAge:16];
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: