您的位置:首页 > 其它

coreData的初步认识

2016-09-03 19:35 225 查看

概述

Core Data不是数据库,⽽而是使⽤用数据库、XML、⼆二进制⽂文件等⽅方式来存储数据的⼀一 个框架。

Core Data是iOS3之后才出现的⼀一个框架,允许我们以⾯面向对象的⽅方式储存和管理数 据。使⽤用Core Data框架,我们可以很轻松有效地通过⾯面向对象的接⼝口管理数据。

Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据, 保存在SQLite3数据库⽂文件中,也能够将保存在数据库中的数据还原成OC对象。 在数据操作过程中,⽆无需编写任何SQL语句。

coreData核心对象

NSManagedObject:模型对象,或者叫实体(entity),可理解为OC⾥里的对象。

NSManagedObjectModel:模型⽂文件(.xcdatamodeld),记录所有的模型对象及对象 的属性

NSPersistentStoreCoordinator:持久化存储协调者,是数据库和程序之间的桥梁, ⽤用来设置数据存储的名字,位置,存储⽅方式,和存储时机。⽤用来执⾏行具体的CRUD操作。

NSManagedObjectContext:对象管理上下⽂文,⽤用户所有的持久化操作都是通过此 对象。再由此对象调NSPersistentStoreCoordinator对象执⾏行具体的操作。

coreData使用步骤

创建模型文件


添加实体


创建实体类










生成对象管理上下文
#import "ViewController.h"
#import "User+CoreDataProperties.h"
#import "Book+CoreDataProperties.h"
#import "AppDelegate.h"

@interface ViewController () {

AppDelegate *delegate;
}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

NSLog(@"%@",NSHomeDirectory());

delegate = [UIApplication sharedApplication].delegate;

//    delegate.managedObjectContext;

//  [self insertObject];

// [self updateObject];
// [self findObject];

[self deleteObject];

}


增删改查操作

添加

#pragma mark - 添加
- (void)insertObject {

// 创建实体对象
// NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];

// 1、添加一个实体对象到 managedObjectContext 中
User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
user.userID = @"10002";
user.userName = @"张三";
user.userAge = @28;
user.userSex = @"男";
user.saveDate = [NSDate date];

// 2、保存上下文
[delegate saveContext];
}

查询

#pragma mark - 查询
- (void)findObject {

// 1、创建一个取值请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];

// 使用谓词设置查询条件
// request.predicate = [NSPredicate predicateWithFormat:@"userAge < 35"];
// request.predicate = [NSPredicate predicateWithFormat:@"userName LIKE '*杨*'"];

// 设置查询的条数
request.fetchLimit = 2;

// 指定到某个位置开始查询(分页效果)
request.fetchOffset = 2;

// 按某个字段升序、降序排列
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userAge" ascending:YES];
request.sortDescriptors = @[sort];

NSError *error = nil;
// 2、在上下文中执行取值请求
NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:&error];

[objects enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

User *user = (User *)obj;

NSLog(@"%@ %@ %@ %@ %@",user.userID, user.userName, user.userAge, user.userSex, user.saveDate);
}];

}

更新

#pragma mark - 更新
- (void)updateObject {

// 1、查询
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"];

NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil];

[objects enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

// 2、修改
User *user = (User *)obj;
user.saveDate = [NSDate date];

// 3、保存
[delegate saveContext];
}];
}

删除

#pragma mark - 删除
- (void)deleteObject {

// 1、查询
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"];

NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil];

[objects enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

// 2、删除
[delegate.managedObjectContext deleteObject:obj];

// 3、保存
[delegate saveContext];
}];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: