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{
}
}
}
就是这么简单。

775

被折叠的 条评论
为什么被折叠?



