// NoteManagedObject.h
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import
#import
@interface NoteManagedObject : NSManagedObject
@property (nonatomic, retain) NSDate * date;
@property (nonatomic, retain) NSString * content;
@end
//
// NoteManagedObject.m
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import "NoteManagedObject.h"
@implementation NoteManagedObject
@dynamic date;
@dynamic content;
@end
//
// Note.h
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import
@interface Note : NSObject
@property (nonatomic,strong) NSDate *date;
@property (nonatomic,strong) NSString *content;
@end
//
// Note.m
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import "Note.h"
@implementation Note
@end
//
// CoreDataDAO.h
// PersistenceLayer
//
//
#import
#import
@interface CoreDataDAO : NSObject
//被管理的对象上下文
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
//被管理的对象模型
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
//持久化存储协调者
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (NSURL *)applicationDocumentsDirectory;
@end
//
// CoreDataDAO.m
// PersistenceLayer
//
//
#import "CoreDataDAO.h"
@implementation CoreDataDAO
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
#pragma mark - Core Data 堆栈
//返回 被管理的对象上下文
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
// 返回 持久化存储协调者
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator) {
return _persistentStoreCoordinator;
}
//数据库文件
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataNotes.sqlite"];
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[selfmanagedObjectModel]];
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:nil
error:nil];
return _persistentStoreCoordinator;
}
// 返回 被管理的对象模型
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel) {
return _managedObjectModel;
}
//模型文件
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataNotes" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
#pragma mark - 应用程序沙箱
// 返回应用程序Docment目录的NSURL类型
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
@end
//
// NoteDAO.h
// MyNotes
//
//
#import
#import "CoreDataDAO.h"
#import "Note.h"
#import "NoteManagedObject.h"
@interface NoteDAO : CoreDataDAO
+ (NoteDAO*)sharedManager;
//插入Note方法
-(int) create:(Note*)model;
//删除Note方法
-(int) remove:(Note*)model;
//修改Note方法
-(int) modify:(Note*)model;
//查询所有数据方法
-(NSMutableArray*) findAll;
//按照主键查询数据方法
-(Note*) findById:(Note*)model;
@end
//
// NoteDAO.m
// MyNotes
//
#import "NoteDAO.h"
@implementation NoteDAO
static NoteDAO *sharedManager = nil;
+ (NoteDAO*)sharedManager
{
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedManager = [[self alloc] init];
[sharedManager managedObjectContext];
});
return sharedManager;
}
//插入Note方法
-(int) create:(Note*)model
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NoteManagedObject *note = [NSEntityDescription insertNewObjectForEntityForName:@"Note"inManagedObjectContext:cxt];
[note setValue: model.content forKey:@"content"];
[note setValue: model.date forKey:@"date"];
note.date = model.date;
note.content = model.content;
NSError *savingError = nil;
if ([self.managedObjectContext save:&savingError]){
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
return -1;
}
return 0;
}
//删除Note方法
-(int) remove:(Note*)model
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Note" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"date = %@", model.date];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *listData = [cxt executeFetchRequest:request error:&error];
if ([listData count] > 0) {
NoteManagedObject *note = [listData lastObject];
[self.managedObjectContext deleteObject:note];
NSError *savingError = nil;
if ([self.managedObjectContext save:&savingError]){
NSLog(@"删除数据成功");
} else {
NSLog(@"删除数据失败");
return -1;
}
}
return 0;
}
//修改Note方法
-(int) modify:(Note*)model
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Note" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"date = %@", model.date];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *listData = [cxt executeFetchRequest:request error:&error];
if ([listData count] > 0) {
NoteManagedObject *note = [listData lastObject];
note.content = model.content;
NSError *savingError = nil;
if ([self.managedObjectContext save:&savingError]){
NSLog(@"修改数据成功");
} else {
NSLog(@"修改数据失败");
return -1;
}
}
return 0;
}
//查询所有数据方法
-(NSMutableArray*) findAll
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Note" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
NSError *error = nil;
NSArray *listData = [cxt executeFetchRequest:request error:&error];
NSMutableArray *resListData = [[NSMutableArray alloc] init];
for (NoteManagedObject *mo in listData) {
Note *note = [[Note alloc] init];
note.date = mo.date;
note.content = mo.content;
[resListData addObject:note];
}
return resListData;
}
//按照主键查询数据方法
-(Note*) findById:(Note*)model
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Note" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"date = %@",model.date];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *listData = [cxt executeFetchRequest:request error:&error];
if ([listData count] > 0) {
NoteManagedObject *mo = [listData lastObject];
Note *note = [[Note alloc] init];
note.date = mo.date;
note.content = mo.content;
return note;
}
return nil;
}
@end
//
// NoteBL.h
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import
#import "Note.h"
#import "NoteDAO.h"
@interface NoteBL : NSObject
//插入Note方法
-(NSMutableArray *)createNote:(Note *)model;
//删除note方法
-(NSMutableArray *)remove:(Note *)model;
//查询所有数据方法
-(NSMutableArray *)findAll;
//修改note方法
-(NSMutableArray *)modify:(Note *)model;
@end
//
// NoteBL.m
// NoteCoreDataLearn
//
// Created by ChengDavid on 14-7-6.
// Copyright (c) 2014年 ChengZhifeng. All rights reserved.
//
#import "NoteBL.h"
@implementation NoteBL
//插入Note方法
-(NSMutableArray *)createNote:(Note *)model
{
NoteDAO *dao=[NoteDAO sharedManager];
[dao create:model];
return [dao findAll];
}
//删除note方法
-(NSMutableArray *)remove:(Note *)model
{
NoteDAO *dao=[NoteDAO sharedManager];
[dao remove:model];
return [dao findAll];
}
//修改note方法
-(NSMutableArray *)modify:(Note *)model
{
NoteDAO *dao=[NoteDAO sharedManager];
[dao modify:model];
return [dao findAll];
}
//查询所有数据方法
-(NSMutableArray *)findAll
{
NoteDAO *dao=[NoteDAO sharedManager];
return [dao findAll];
}
@end
需要提一下的是,这里的NoteDAO用到了单例模式。NoteBL则不需要单例模式。
sqlite文件则会自动在document文件夹下生成,无需理会。用sqlitemanger看了下,里面的数据是不加密的
附上测试的代码
//找到数据库文件的路径。可以观察到自动生成的数据库文件
- (IBAction)test:(id)sender {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"路径:%@",documentsDirectory);
}
- (IBAction)create:(id)sender {
NoteBL *noteBl=[[NoteBL alloc] init];
Note *note=[[Note alloc] init];
note.date = [[NSDate alloc] init];
note.content = @"hello world";
NSMutableArray *dataList = [noteBl createNote:note];
int length = dataList.count;
for(int i=0;i
Note *tmp = [dataList objectAtIndex:i];
NSLog(@"------%d",i);
NSLog(@"date:%@",tmp.date);
NSLog(@"content:%@",tmp.content);
}
}
- (IBAction)remove:(id)sender {
NoteBL *noteBl=[[NoteBL alloc] init];
NSMutableArray *dataList = [noteBl findAll];
int length = dataList.count;
NSLog(@"删之前:%d条记录",length);
if(length<=0) return;
Note *tmp = [dataList objectAtIndex:length-1];
[noteBl remove:tmp];
dataList = [noteBl findAll];
length = dataList.count;
NSLog(@"删之后:%d条记录",length);
}
- (IBAction)modify:(id)sender {
NoteBL *noteBl=[[NoteBL alloc] init];
NSMutableArray *dataList = [noteBl findAll];
NSLog(@"修改之前:");
Note *tmp = [dataList objectAtIndex:0];
NSLog(@"date:%@",tmp.date);
NSLog(@"content:%@",tmp.content);
[tmp setContent:@"hhahahhahahhaha"];
dataList = [noteBl modify:tmp];
NSLog(@"修改之后:");
tmp = [dataList objectAtIndex:0];
NSLog(@"date:%@",tmp.date);
NSLog(@"content:%@",tmp.content);
}