Coredata使用

来源:互联网 发布:阿里云主机记录 编辑:程序博客网 时间:2024/05/16 04:35

coredata是iOS系统提供用于对象化管理数据并且持久化的框架,较于FMDB,coredata的优势:第一是CoreData作为苹果提供的原生框架,在内存方法比SQLite有性能上的优势。第二是CoreData操作数据不需要使用SQLite代码,使用方便。第三是CoreData把数据用面向对象方式进行管理,操作数据库更方便。
CoreData的核心是Core Data stack(技术栈堆)。CoreData就是依靠Core Data stack中的几个对象进行数据操作的。这几对象是:
NSManagedObjectContext ,管理对象的上下文: 负责管理模型对象的一个集合,
NSManagedObjectModel 被管理的对象模型
NSPersistentStoreCoordinator 存储调度器: 负责将数据保存到磁盘,
NSPersistentStore用于保存模型数据,受NSPersistentStoreCoordinator 存储调度器的操控。
1,CoreDataModel创建 选择 Use Core Data
这里写图片描述

创建model,model名字首字母必须为大写,model字段首字母必须为小写
这里写图片描述
选择Editor—–>Create……..
这里写图片描述

创建完成实现增、删、改、查方法
新建一个管理的类
.h文件

import

import

define YYCoredata [YYCoredataManager ShareManager]

@interface YYCoredataManager : NSObject

///管理对象上下文
@property(strong,nonatomic)NSManagedObjectContext *managerContenxt;
///模型对象
@property(strong,nonatomic)NSManagedObjectModel *managerModel;
///存储调度器
@property(strong,nonatomic)NSPersistentStoreCoordinator *maagerDinator;
//保存数据
+(YYCoredataManager *)ShareManager;
-(void)Save;

.m文件
//创建一个单例
+(YYCoredataManager *)ShareManager{

static YYCoredataManager *coredataManager = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{    coredataManager = [[YYCoredataManager alloc]init];});return coredataManager;

}

-(NSURL *)getDocumentUrlPath{

///获取文件位置return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

}

-(NSManagedObjectContext *)managerContenxt{

if (_managerContenxt != nil) {    return _managerContenxt;}_managerContenxt = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];///设置存储调度器[_managerContenxt setPersistentStoreCoordinator:self.maagerDinator];return _managerContenxt;

}

///懒加载模型对象
-(NSManagedObjectModel *)managerModel
{

if (_managerModel != nil) {    return _managerModel;}_managerModel = [NSManagedObjectModel mergedModelFromBundles:nil];return _managerModel;

}

-(NSPersistentStoreCoordinator *)maagerDinator
{
if (_maagerDinator != nil) {

    return _maagerDinator;}_maagerDinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:self.managerModel];//添加存储器/** * type:一般使用数据库存储方式NSSQLiteStoreType * configuration:配置信息 一般无需配置 * URL:要保存的文件路径 * options:参数信息 一般无需设置 *///拼接url路径NSURL *url = [[self getDocumentUrlPath]URLByAppendingPathComponent:@"sqlit.db" isDirectory:YES];//数据库迁移(必须要有,便于增加model字段或者新建model)NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),                          NSInferMappingModelAutomaticallyOption:@(YES)};[_maagerDinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:nil];return _maagerDinator;

}

-(void)Save{

///保存数据[self.managerContenxt save:nil];

}

在ViewController里使用
// NSArray *data = @[@{@”name”:@”youyou1”,@”age”:@”10”,@”male”:@”女”},@{@”name”:@”youyou2”,@”age”:@”15”,@”male”:@”女”},@{@”name”:@”youyou3”,@”age”:@”18”,@”male”:@”女”}];
//
//
// for (NSDictionary *dict in data) {
//
// Student *studentmodel = [NSEntityDescription insertNewObjectForEntityForName:@”Student” inManagedObjectContext:YYCoredata.managerContenxt];
// studentmodel.name = dict[@”name”];
// studentmodel.age = [dict[@”age”] intValue];
// studentmodel.male = dict[@”male”];
// studentmodel.heigth = @”150cm”;
//
//
// }
//
// [YYCoredata Save];

//创建查询请求NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];

NSArray *arr = [YYCoredata.managerContenxt executeFetchRequest:request error:nil];
for (Student *model in arr) {

// NSLog(@”%@ %d”,model.name,model.age);
}

//创建查询条件NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = 15 and name = 'youyou2'"];request.predicate = predicate;NSArray<Student *> *seleteArr = [YYCoredata.managerContenxt executeFetchRequest:request error:nil];for (Student *model in seleteArr) {     NSLog(@"=== %@",model.name);    model.weight = 40;}[YYCoredata Save];NSArray<Student *> *seleteArr1 = [YYCoredata.managerContenxt executeFetchRequest:request error:nil];for (Student *model in seleteArr1) {    NSLog(@"hhhhh %@ %d",model.name,model.weight);}
原创粉丝点击