CoreData 的使用

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{

            }
        }
    }

就是这么简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值