CoreData 简单介绍

一:一个大概的CoreData 的流程
这里写图片描述

二:初始化CoreData 资源文件
这里写图片描述

三:封装CoreDataManage

//
//  CoreDataManager.h
//  CoreData
//
//  Created by apple on 16/1/14.
//  Copyright © 2016年 李重阳. All rights reserved.
//

/*
 1、NSManagedObjectContext :管理对象,上下文,持久性存储模型对象
 2、NSManagedObjectModel :被管理的数据模型,数据结构
 3、NSPersistentStoreCoordinator :连接数据库的
 4、NSManagedObject: 被管理的数据记录
 5、NSFetchRequest :数据请求
 6、NSEntityDescription :表格实体结构
 此外还需要知道.xcdatamodel文件编译后为.momd或者.mom文件
 */

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "NewsModel.h"
@interface CoreDataManager : NSObject

+ (CoreDataManager *)shareCoreDataManager;
#pragma mark - 增加一条数据
- (void)insertCoreDataOneData:(NewsModel *)newsModel;
#pragma mark - 增加一系列 数据
- (void)insertCoreDataArr:(NSArray *)dataArr;
#pragma mark -  删除

- (void)deleteAllData;
#pragma mark - 改(更新)
- (void)uploadCoreDataWithNewsId:(NSString *)newsId withUpdateNewsModel:(NewsModel *)updateNewsModel;
#pragma mark - 查

#pragma mark - 找出所有的实例
- (NSArray *)findAllDataArr;


@end
//
//  CoreDataManager.m
//  CoreData
//
//  Created by apple on 16/1/14.
//  Copyright © 2016年 李重阳. All rights reserved.
//

#import "CoreDataManager.h"
#define tableName  @"NewsModel"

@interface CoreDataManager ()

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


@end
@implementation CoreDataManager


+ (CoreDataManager *)shareCoreDataManager {

    static CoreDataManager * coreDataManager = nil;
    static dispatch_once_t predicate ;
    dispatch_once(&predicate, ^{
        coreDataManager = [[self alloc]init];
    });
    return coreDataManager;
}

#pragma mark - coreData 初始化 

- (NSManagedObjectModel *)managedObjectModel {

    if (_managedObjectModel == nil) {

        NSURL *modelURL = [[NSBundle mainBundle]URLForResource:@"NewsCoreDataModel" withExtension:@"momd"];
        _managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];
    }
    return _managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (_persistentStoreCoordinator == nil) {
        NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"NewsCoreDataModel.sqlite"];
        _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:self.managedObjectModel];
        NSError *error = nil;
        [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];
        if (error) {
            NSLog(@"%@",error);
        }
    }
    return _persistentStoreCoordinator;
}

- (NSManagedObjectContext *)managedObjectContext {

    if (_managedObjectContext == nil) {

        _managedObjectContext = [[NSManagedObjectContext alloc]init];
        _managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
    }
    return _managedObjectContext;
}

#pragma mark - 储存位置
- (NSURL *)applicationDocumentsDirectory {

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}


#pragma mark - 各种数据库操作 
#pragma mark - 增加一条数据
- (void)insertCoreDataOneData:(NewsModel *)newsModel {

    NSLog(@"context is: %@", [self.managedObjectContext description]);

    NewsModel * insertModel = (NewsModel *)[NSEntityDescription insertNewObjectForEntityForName:tableName inManagedObjectContext:self.managedObjectContext];
    insertModel.descr = newsModel.descr;
    insertModel.newsId = newsModel.newsId;
    NSError * error= nil;
    [self.managedObjectContext save:&error];
    if (error) {
        NSLog(@"insert error = %@",error.localizedDescription);
    }

}
#pragma mark - 增加一系列 数据
- (void)insertCoreDataArr:(NSArray *)dataArr {

    for (NewsModel * newsModel in dataArr) {
        [self insertCoreDataOneData:newsModel];
    }
}

#pragma mark -  删除

- (void)deleteAllData {

    NSArray * dataArr = [self findAllDataArr];
    if (dataArr) {
        for (NSManagedObject * obj in dataArr) {
            [self.managedObjectContext deleteObject:obj];
        }
        // 删除成功后要保存,不写这句话 删除不成功的
        [self.managedObjectContext save:nil];
    }

}

#pragma mark - 改(更新)
- (void)uploadCoreDataWithNewsId:(NSString *)newsId withUpdateNewsModel:(NewsModel *)updateNewsModel{

    NSEntityDescription *entity = [NSEntityDescription entityForName:tableName inManagedObjectContext:self.managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];
    NSPredicate *predicate = [NSPredicate
                              predicateWithFormat:@"newsId like[cd] %@",newsId];
    [request setPredicate:predicate];
    NSError *error = nil;
    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (!error) {
        for (NewsModel * newsModel in result) {
            newsModel.descr = updateNewsModel.descr;
        }
        [self.managedObjectContext save:&error];
    }

}

#pragma mark - 查 

#pragma mark - 找出所有的实例
- (NSArray *)findAllDataArr {

    NSEntityDescription *entity = [NSEntityDescription entityForName:tableName inManagedObjectContext:self.managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setIncludesPropertyValues:NO];
    [request setEntity:entity];
    NSError *error = nil;
    NSArray *dataArr = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (error || dataArr.count == 0) {
        return nil;
    }else {
        return dataArr;
    }
}



@end






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值