iOS coredata数据库的基本使用

1.使用coredata我们要了解它的操作模式,coredata所进行的操作是以对象为基准,所以如果你想用coredata就必须创建与之对应的模型类

2.接下来便是创建coredata,第一种创建项目的时候我们就可以直接创建

圆圈的位置勾选上即可,第二种创建

3.创建coredata成功后我们要在一个类进行数据的简单的增删改差,我把这个类简单的叫做dataBase上面的便是caredata文件,

在后,我们要在这个类引入两个头文件,第一个头文件,就不会解释了,第二个头文件,应caredata是基于sqlite所依才引用#import <sqlite3.h>

#import <sqlite3.h>

4.接下来就是写代码dataBase.h中写如下代码

@property (readonly,strong,nonatomic)NSManagedObjectContext       *managedObjectContext;
@property (readonly,strong,nonatomic)NSManagedObjectModel         *managedObjectModel;
@property (readonly,strong,nonatomic)NSPersistentStoreCoordinator *persistentStoreCoordinator;

接下来就是写代码dataBase.m写如下代码,这些代码主要与sqlite建立关系,创建映射路径等问题

#import <CoreData/CoreData.h>
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
#pragma mark 通过coredata进行存储和查询
- (void)saveContext{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            //NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }
}

#pragma mark - Core Data stack
// Returns the managed object context for the application.
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
- (NSManagedObjectContext *)managedObjectContext{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}

// Returns the managed object model for the application.
// If the model doesn't already exist, it is created from the application's model.
- (NSManagedObjectModel *)managedObjectModel{
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"YGche" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}

// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and the application's store added to it.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }
    NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption, nil];
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"YGche.sqlite"];
    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:optionsDictionary error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    return _persistentStoreCoordinator;
}

#pragma mark - Application's Documents directory
// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

 

//////////////////////////////////////////////////////////////////
下面便是添加红色圆圈位置便是添加所对应的模型类的名字,首字母必须大写
接下来便是添加coredata所需要的模型类
这样模型类就和coredata建立了联系,在填写的时候切记首字母大写
建立联系以后就是简单的增删改查
#pragma mark 判断原来的数据是否存在,存在返回YES,反之
- (BOOL)collectionData:(NSString *)cId{
    NSManagedObjectContext *context = [self managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"testid = %@",cId];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CollectionModel"inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    [fetchRequest setFetchLimit:100];
    [fetchRequest setFetchOffset:0];
    [fetchRequest setPredicate:predicate];
    NSError *error;
    NSArray *Objects = [context executeFetchRequest:fetchRequest error:&error];
    if (Objects.count>0) {
        return YES;
    }
    return NO;
}

#pragma mark 插入收藏数据,如果不存在就可以插入数据当然也可以不用判断是否重复插入
- (void)collectionInsertData:(NSString *)cId kenm :(NSString *)kenm{
    NSManagedObjectContext * context = [self managedObjectContext];
    CollectionModel *model = (CollectionModel *)[NSEntityDescription insertNewObjectForEntityForName:@"CollectionModel"inManagedObjectContext:context];
    model.testid = cId;
    model.kenm = kenm;
    NSError *error;
    if(![contextsave:&error]) {
        NSLog(@"%@不能保存:%@",model.testid,[errorlocalized Description]);
    }else{
        NSLog(@"保存:%@",model.testid);
    }
}

#pragma mark查询所有收藏数据,通过CollectionModel.testid属性进行查询查询完成后,CollectionModel.testid存储的内容。当然也可以直接存储CollectionModel
- (NSMutableArray*)queryCollectionData:(NSString *)testid{
    NSManagedObjectContext *context = [self managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"testid = %@",testid];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CollectionModel"inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    [fetchRequest setFetchLimit:100];
    [fetchRequest setFetchOffset:0];
    [fetchRequest setPredicate:predicate];
    NSError *error;
    NSArray *Objects = [context executeFetchRequest:fetchRequest error:&error];
    NSMutableArray *resultArray = [NSMutableArray array];
    for (CollectionModel *modelObj in Objects) {
        [resultArray addObject:modelObj.testid];
    }
    return resultArray;
}

#pragma mark 删除指定的收藏id对应的数据,传过来colllectionId就会删除colllectionId所对应的所有信息
- (BOOL)deleteCollectionData:(NSString *)colllectionId{
    BOOL isDelet;
    NSManagedObjectContext *context = [self managedObjectContext];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"testid = %@",colllectionId];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CollectionModel"inManagedObjectContext:context];
    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    [request setIncludesPropertyValues:NO];
    [request setEntity:entity];
    [request setPredicate:predicate];
    NSError *error =nil;
    NSArray *datas = [context executeFetchRequest:request error:&error];
    if (!error && datas && [datas count]) {
        for (NSManagedObject *obj in datas) {
            [context deleteObject:obj];
            isDelet = YES;
        }
        if (![context save:&error]) {
            isDelet=NO;
        }
    }
    return isDelet;
}
以上这些就是本人的写的一些基本操作
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王 哪跑!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值