标签:
//1. 读入工程中所有的实体类模型文件【以单例对象保存】
+ (instancetype)managedObjectModel { static NSManagedObjectModel *model = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //搜索工程中所有的.xcdatamodeld文件,并加载所有的实体到一个NSManagedObjectModel对象中 model = [NSManagedObjectModel mergedModelFromBundles:@[[NSBundle mainBundle]]]; }); return model; }
//2. 只读入某个名字的模型文件【同样以单例对象保存】 + (instancetype)managedObjectModelWithName:(NSString *)modelName { static NSManagedObjectModel *model = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ /*初始化必须依赖.momd文件路径,而.momd文件由.xcdatamodeld文件编译而来*/ NSURL *modelURL = [[NSBundle mainBundle] URLForResource:modelName withExtension:@"momd"]; model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; }); return model; }
/** * 创建NSPersistentStoreCoordinator对象【单例保存】 * * @param isAuto 是否使用自动版本迁移 * @param storeType 数据文件在手机沙盒目录存放的格式 * @param fileURL 数据文件在手机沙盒目录存放的路径 * */ + (instancetype)createWithAutoMigration:(BOOL)isAuto StoreType:(NSString *)storeType StoreFileURL:(NSURL *)fileURL { //1. 实体类模型文件读入内存对象保存 NSManagedObjectModel *model = [NSManagedObjectModel managedObjectModel]; //2. 传入实体类模型文件对象,创建PersistentStoreCoordinator存储区域对象 NSPersistentStoreCoordinator * coordinator = nil; coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; //3. 指定在手机本地存放数据库的 位置、类型、配置 NSDictionary *options = isAuto ? [self autoMigrationOptions] : nil; NSError *error = nil; [coordinator addPersistentStoreWithType:storeType configuration:nil URL:fileURL options:options error:&error]; if (error) { ErrorLog(error); abort(); } if (!coordinator) { [NSException raise:@"NSPersistentCoordinator Create Failed With URL: %@ , Error Message: %@" format:[fileURL absoluteString], [error localizedDescription]]; } return coordinator; }
//1. 主线程上得单例Context对象 + (instancetype)foregroundContext { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _foregoundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //默认设置一个版本自动迁移的存储器 id persistentStoreCoordinator = [NSPersistentStoreCoordinator coordinatorUseAutoMigration]; [_foregoundContext setPersistentStoreCoordinator:persistentStoreCoordinator]; }); return _foregoundContext; }
//2. 后台子线程上得单例Context对象 + (instancetype)backgroundContext { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ id context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; [self setBackgroudContext:context]; [_backgoundContext setParentContext:[self foregroundContext]]; }); return _backgoundContext; }
//3. 提供获取单例Context对象的入口函数,对不同线程提供不同的单例Context对象 + (instancetype)managedObjectContext { if ([NSThread isMainThread]) { return [self foregroundContext]; } else { return [self backgroundContext]; } }
标签:
原文地址:http://www.cnblogs.com/xiongzenghui/p/4623587.html