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