Coredata使用

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);


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值