• iOS.数据持久化.PersistenceLayer.Core Data


    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
    
    @interface Persistence04NoteCoreDataDAO : NSObject
    
    
    //被管理的对象上下文
    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
    //被管理的对象模型
    @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
    //持久化存储协调者
    @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    
    - (NSURL *)applicationDocumentsDirectory;
    
    @end
    #import "Persistence04NoteCoreDataDAO.h"
    
    @implementation Persistence04NoteCoreDataDAO
    
    @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:[self managedObjectModel]];
        
        [_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
    #import <CoreData/CoreData.h>
    
    #import "Persistence04NoteCoreDataDAO.h"
    #import "Persistence04Note.h"
    #import "NoteManagedObject.h"
    
    @interface Persistence04NoteDAO : Persistence04NoteCoreDataDAO
    
    
    + (Persistence04NoteDAO*)sharedManager;
    
    //插入Note方法
    -(int) create:(Persistence04Note*)model;
    
    //删除Note方法
    -(int) remove:(Persistence04Note*)model;
    
    //修改Note方法
    -(int) modify:(Persistence04Note*)model;
    
    //查询所有数据方法
    -(NSMutableArray*) findAll;
    
    //按照主键查询数据方法
    -(Persistence04Note*) findById:(Persistence04Note*)model;
    
    @end
    #import "Persistence04NoteDAO.h"
    
    @implementation Persistence04NoteDAO
    
    static Persistence04NoteDAO *sharedManager = nil;
    
    + (Persistence04NoteDAO*)sharedManager
    {
        static dispatch_once_t once;
        dispatch_once(&once, ^{
            
            sharedManager = [[self alloc] init];
            [sharedManager managedObjectContext];
            
        });
        return sharedManager;
    }
    
    
    //插入Note方法
    -(int) create:(Persistence04Note*)model
    {
        
        NSManagedObjectContext *cxt = [self managedObjectContext];
        
        NoteManagedObject *note = [NSEntityDescription insertNewObjectForEntityForName:@"Persistence04Note" 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:(Persistence04Note*)model
    {
        
        NSManagedObjectContext *cxt = [self managedObjectContext];
        
        NSEntityDescription *entityDescription = [NSEntityDescription
                                                  entityForName:@"Persistence04Note" 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:(Persistence04Note*)model
    {
        NSManagedObjectContext *cxt = [self managedObjectContext];
        
        NSEntityDescription *entityDescription = [NSEntityDescription
                                                  entityForName:@"Persistence04Note" 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:@"Persistence04Note" 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) {
            Persistence04Note *note = [[Persistence04Note alloc] init];
            note.date = mo.date;
            note.content = mo.content;
            [resListData addObject:note];
        }
        
        return resListData;
    }
    
    //按照主键查询数据方法
    -(Persistence04Note*) findById:(Persistence04Note*)model
    {
        NSManagedObjectContext *cxt = [self managedObjectContext];
        
        NSEntityDescription *entityDescription = [NSEntityDescription
                                                  entityForName:@"Persistence04Note" 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];
            
            Persistence04Note *note = [[Persistence04Note alloc] init];
            note.date = mo.date;
            note.content = mo.content;
            
            return note;
        }
        return nil;
    }
    
    
    
    @end
  • 相关阅读:
    iOS学习笔记---oc语言第一天
    iOS学习笔记---c语言第十一天
    iOS学习笔记---c语言第十天
    iOS学习笔记---c语言第九天
    iOS学习笔记---c语言第八天
    iOS学习笔记---c语言学习第七天
    iOS学习笔记---c语言第六天
    C语言常用排序全解(转)
    iOS学习笔记---C语言第五天
    iOS学习笔记---C语言第四天
  • 原文地址:https://www.cnblogs.com/cqchen/p/3793855.html
Copyright © 2020-2023  润新知