zoukankan      html  css  js  c++  java
  • CoreDataManager-OC版-兼容iOS10以前的版本

    头文件:

     1 #import <Foundation/Foundation.h>
     2 #import <CoreData/CoreData.h>
     3 
     4 /**
     5  CoreData管理器
     6  */
     7 @interface CoreDataManager : NSObject
     8 
     9 + (instancetype)sharedManager;
    10 
    11 /**
    12  持久化容器 - 可以提供管理上下文 iOS 10 推出
    13  包含了 Core Data stack 中所有的核心对象,都不是线程安全的
    14  
    15  - NSManagedObjectContext *viewContext; 管理上下文
    16  - NSManagedObjectModel *managedObjectModel;
    17  - NSPersistentStoreCoordinator *persistentStoreCoordinator;
    18  */
    19 //@property (readonly, strong) NSPersistentContainer *persistentContainer;
    20 
    21 /**
    22  管理对象上下文
    23  */
    24 @property (readonly, strong) NSManagedObjectContext *moc;
    25 
    26 /**
    27  保存上下文
    28  */
    29 - (void)saveContext;
    30 
    31 @end

    .m文件:

     1 #import "CoreDataManager.h"
     2 
     3 @implementation CoreDataManager
     4 
     5 + (instancetype)sharedManager {
     6     static id instance;
     7     static dispatch_once_t onceToken;
     8     dispatch_once(&onceToken, ^{
     9         instance = [self new];
    10     });
    11     return instance;
    12 }
    13 
    14 #pragma mark - Core Data stack
    15 // 如果重写了只读属性的 getter 方法,编译器不再提供 _成员变量
    16 @synthesize moc = _moc;
    17 
    18 /**
    19  为了低版本的兼容
    20  */
    21 - (NSManagedObjectContext *)moc {
    22     
    23     if (_moc != nil) {
    24         return _moc;
    25     }
    26     
    27     // 互斥锁,应该锁定的代码尽量少!
    28     @synchronized (self) {
    29         
    30         // 1. 实例化管理上下文
    31         _moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    32         
    33         // 2. 管理对象模型(实体)
    34         NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];
    35         
    36         // 3. 持久化存储调度器
    37         NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
    38         
    39         // 4. 添加数据库
    40         /**
    41          1> 数据存储类型
    42          3> 保存 SQLite 数据库文件的 URL
    43          4> 设置数据库选项
    44          */
    45         NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
    46         NSString *path = [cacheDir stringByAppendingPathComponent:@"ys.db"];
    47         // 将本地文件的完整路径转换成 文件 URL
    48         NSURL *url = [NSURL fileURLWithPath:path];
    49         
    50         NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @(YES),
    51                                   NSInferMappingModelAutomaticallyOption: @(YES)};
    52         
    53         [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:options error:NULL];
    54         
    55         // 5. 给管理上下文指定存储调度器
    56         _moc.persistentStoreCoordinator = psc;
    57     }
    58     
    59     return _moc;
    60 }
    61 
    62 #pragma mark - Core Data Saving support
    63 - (void)saveContext {
    64     NSManagedObjectContext *context = self.moc;
    65     
    66     // 判断上下文中是否有数据发生变化
    67     // `事务` 可以保存多个数据,不一定每次数据变化都需要保存,例如:for 增加多条记录,就可以最后调用一次保存操作即可!
    68     if (![context hasChanges]) {
    69         return;
    70     }
    71     
    72     // 保存数据
    73     NSError *error = nil;
    74     
    75     if (![context save:&error]) {
    76         NSLog(@"保存数据出错 %@, %@", error, error.userInfo);
    77     }
    78 }
    79 
    80 @end
  • 相关阅读:
    Failed at the node-sass@4.13.1 postinstall script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    页面跳转
    多行文字溢出显示省略号
    iview-select选择器组件的使用&设置默认选中的值
    iview中表单验证(遇到的问题)
    iview DatePicker type 为dateTime 时无法做表单验证!
    报错:[Vue warn]: Error in callback for watcher "value": "Value should be trueValue or falseValue."
    Jquery 数字滚动兼容小数
    validate表单验证-单独验证
    2020软件工程作业03
  • 原文地址:https://www.cnblogs.com/panda1024/p/6219726.html
Copyright © 2011-2022 走看看