日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

14-CoreData兼容iOS9和iOS10

發布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 14-CoreData兼容iOS9和iOS10 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 由于iOS10之后CoreData Stack的更改無法在iOS9的系統中運行,所以我們需要對上一小節中封裝的工具類進行系統版本的兼容

  • iOS9和iOS10中CoreData最本質的區別其實就是管理對象上下文

    • iOS9中NSManagedObjectContext需要我們手動創建
    • iOS10中由NSPersistentContainer自動生成
  • HMCoreDataManager.h

#import <Foundation/Foundation.h> #import <CoreData/CoreData.h>#define kHMCoreDataManager [HMCoreDataManager shareInstance]@interface HMCoreDataManager : NSObject//單利類 +(HMCoreDataManager*)shareInstance;//保存到數據庫 - (void)save;//管理對象上下文 //這里聲明為readonly的目的主要是重寫get方法使其成為計算型屬性 @property(nonatomic,strong,readonly)NSManagedObjectContext *managedObjectContext;//通過方法返回iOS10的NSPersistentContainer //如果是iOS9,則返回nil //該方法的目的主要是便于使用ios10的多線程操作數據庫 - (NSPersistentContainer *)getCurrentPersistentContainer;@end
  • HMCoreDataManager.m
#import "HMCoreDataManager.h" #import <UIKit/UIKit.h>@interface HMCoreDataManager ()//iOS9中 CoreData Stack核心的三個類 //管理模型文件上下文 @property(nonatomic,strong)NSManagedObjectContext *managedObjectContext1; //模型文件 @property(nonatomic,strong)NSManagedObjectModel *managedObjectModel; //存儲調度器 @property(nonatomic,strong)NSPersistentStoreCoordinator *persistentStoreCoordinator;//iOS10中NSPersistentContainer /**CoreData Stack容器內部包含:管理對象上下文:NSManagedObjectContext *viewContext;對象管理模型:NSManagedObjectModel *managedObjectModel存儲調度器:NSPersistentStoreCoordinator *persistentStoreCoordinator;*/ @property(nonatomic,strong)NSPersistentContainer *persistentContainer;@end@implementation HMCoreDataManager+ (HMCoreDataManager *)shareInstance {static HMCoreDataManager *manager = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{manager = [[HMCoreDataManager alloc] init];});return manager; }#pragma mark -iOS9 CoreData Stack//獲取沙盒路徑URL -(NSURL*)getDocumentsUrl {return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject]; }//懶加載managedObjectModel - (NSManagedObjectModel *)managedObjectModel {if (_managedObjectModel != nil) {return _managedObjectModel;}// //根據某個模型文件路徑創建模型文件// _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"Person" withExtension:@"momd"]];//合并Bundle所有.momd文件//budles: 指定為nil,自動從mainBundle里找所有.momd文件_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];return _managedObjectModel;}//懶加載persistentStoreCoordinator -(NSPersistentStoreCoordinator*)persistentStoreCoordinator {if (_persistentStoreCoordinator != nil) {return _persistentStoreCoordinator;}//根據模型文件創建存儲調度器_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];/*** 給存儲調度器添加存儲器** tyep:存儲類型* configuration:配置信息 一般為nil* options:屬性信息 一般為nil* URL:存儲文件路徑*/NSURL *url = [[self getDocumentsUrl] URLByAppendingPathComponent:@"person.db" isDirectory:YES];[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];NSLog(@"%@",_persistentStoreCoordinator.persistentStores[0].URL);return _persistentStoreCoordinator;}//懶加載managedObjectContext -(NSManagedObjectContext*)managedObjectContext1 {if (_managedObjectContext1 != nil) {return _managedObjectContext1;}//參數表示線程類型 NSPrivateQueueConcurrencyType比NSMainQueueConcurrencyType略有延遲_managedObjectContext1 = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];//設置存儲調度器[_managedObjectContext1 setPersistentStoreCoordinator:self.persistentStoreCoordinator];return _managedObjectContext1; }#pragma mark -iOS10 CoreData Stack//懶加載NSPersistentContainer - (NSPersistentContainer *)persistentContainer {if(_persistentContainer != nil){return _persistentContainer;}//1.創建對象管理模型// //根據某個模型文件路徑創建模型文件 // NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"Person" withExtension:@"momd"]];//合并Bundle所有.momd文件//budles: 指定為nil,自動從mainBundle里找所有.momd文件NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];//2.創建NSPersistentContainer/*** name:數據庫文件名稱*/_persistentContainer = [[NSPersistentContainer alloc] initWithName:@"sql.db" managedObjectModel:model];//3.加載存儲器[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * description, NSError * error) {NSLog(@"%@",description);NSLog(@"%@",error);}];return _persistentContainer; }#pragma mark - NSManagedObjectContext//重寫get方法 - (NSManagedObjectContext *)managedObjectContext {//獲取系統版本float systemNum = [[UIDevice currentDevice].systemVersion floatValue];//根據系統版本返回不同的NSManagedObjectContextif(systemNum < 10.0){return kHMCoreDataManager.managedObjectContext1;}else{return kHMCoreDataManager.persistentContainer.viewContext;} }- (NSPersistentContainer *)getCurrentPersistentContainer {//獲取系統版本float systemNum = [[UIDevice currentDevice].systemVersion floatValue];//根據系統版本返回不同的NSManagedObjectContextif(systemNum < 10.0){return nil;}else{return kHMCoreDataManager.persistentContainer;} }- (void)save {NSError *error = nil;[kHMCoreDataManager.managedObjectContext save:&error];if (error == nil) {NSLog(@"保存到數據庫成功");}else{NSLog(@"保存到數據庫失敗:%@",error);} }@end

總結

以上是生活随笔為你收集整理的14-CoreData兼容iOS9和iOS10的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。