CoreData其实就是Apple为开发者提供的便捷数据存储方式,本质是对sqlite数据库的操作,操作的数据量为中到大量。
操作数据库,还有FMDB第三方库,相比于FMDB,CoreData要更简单,更方便。
集成CoreData:
1,创建工程勾选,user core data:
2,已有项目添加CoreData,添加文件New File>Data Model,创建如下后缀名文件,编译后也叫.momd或.mom后缀,只不过代码中必须用.momd
这是可视化的模型文件,可创建一个或多个实体(Entity),相当于数据库中的表,因为操作的是数据型关系库,实体间可以进行关联(relationship)
特别的,如果是已有objective-c项目添加.xcdatamodeld文件,编译提示swift version错误,修改xcdatamodeld文件配置即可,如下
以上是添加xcdatamodeld文件部分,下面就是代码部分:
1,AppDelegate部分
2,增删改查部分
1,AppDelegate部分:
.h文件添加三个属性
//管理存储对象上下文@property (readonly,strong,nonatomic)NSManagedObjectContext *managedObjectContext;//管理存储对象,数据库的model@property (readonly,strong,nonatomic)NSManagedObjectModel *managedObjectModel;//协调者,上下文和model的协调者@property (readonly,strong,nonatomic)NSPersistentStoreCoordinator *persistentStoreCoordinator;
.m文件添加synthesize,为了开发者的个性化使用,@property后,系统不自动生成setter,getter方法,必须要加的,方便配置不同信息,
@synthesize managedObjectContext =_managedObjectContext;@synthesize managedObjectModel = _managedObjectModel;@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
以下是三个属性getter方法和一个数据库存储位置方法:
#pragma mark - Core Data
- (NSManagedObjectContext *)managedObjectContext
{if (_managedObjectContext !=nil) {return _managedObjectContext;}NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];if (coordinator != nil) {_managedObjectContext = [[NSManagedObjectContext alloc]init];[_managedObjectContext setPersistentStoreCoordinator:coordinator];}return _managedObjectContext;
}- (NSManagedObjectModel *)managedObjectModel
{if (_managedObjectModel !=nil) {return _managedObjectModel;}//source名字是自己Model.xcdatamodeld名字NSURL *modelURL = [[NSBundle mainBundle]URLForResource:@"Model"withExtension:@"momd"];_managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];return _managedObjectModel;
}- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{if (_persistentStoreCoordinator !=nil) {return _persistentStoreCoordinator;}//这里的model.sqlite,自己定,最好按业务来NSURL *storeURL = [[self applicationDocumentsDirectory]URLByAppendingPathComponent:@"model.sqlite"];NSError *error = nil;_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self managedObjectModel]];if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {NSLog(@"Unresolvederror %@, %@", error, [error userInfo]);abort();}return _persistentStoreCoordinator;
}#pragma mark - Application's Documents directory
- (NSURL*)applicationDocumentsDirectory
{return[[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}
2,增删改查部分:
//获取数据库实体,查询结果
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{AppDelegate *appDele = (AppDelegate *)[UIApplication sharedApplication].delegate;//将获取请求的实体设置为Person对象NSEntityDescription *personEntity = [NSEntityDescription entityForName:@"Woman" inManagedObjectContext:appDele.managedObjectContext];//创建一个新的请求NSFetchRequest *request = [NSFetchRequest new];[request setEntity:personEntity];//为请求设置一个谓词来限制请求的结果,不设置也可以
// NSPredicate *query = [NSPredicate predicateWithFormat:@"name like %@",@"*22*"];
// [request setPredicate:query];//获取结果NSError *error = nil;NSArray *fetchResults = [appDele.managedObjectContext executeFetchRequest:request error:&error];}
fetchResults就是查询结果
//增
for (int i =0; i<5; i++) {Person *n = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:appDele.managedObjectContext];[n setName:[NSString stringWithFormat:@"person name-%d",(int)(i+[fetchResults count])]];Woman *wo = [NSEntityDescription insertNewObjectForEntityForName:@"Woman" inManagedObjectContext:appDele.managedObjectContext];[wo setRelationship:n];[wo setName:[NSString stringWithFormat:@"woman name-%d",(int)(i+[fetchResults count])]];}//调用保存上下文,将修改提交到持久化存储中NSError *error = nil;if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{clicked = YES;}
//删//查询、删除操作if ([fetchResults count] > 0) {for (int i =0; i<[fetchResults count]; i++) {Woman *person = [fetchResults objectAtIndex:i];[appDele.managedObjectContext deleteObject:person];if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{}}}
//改//查询、修改操作if ([fetchResults count] > 0) {for (int i =0; i<[fetchResults count]; i++) {Woman *person = [fetchResults objectAtIndex:i];person.name = [NSString stringWithFormat:@"%@++++",person.name];if (![appDele.managedObjectContext save:&error]) {NSLog(@"保存出错");}else{}}}
就是这么简单。