一:一个大概的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