#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>#define kHMCoreDataManager [HMCoreDataManager shareInstance]@interface HMCoreDataManager : NSObject
+(HMCoreDataManager*)shareInstance;
- (
void)save;
@property(
nonatomic,
strong,
readonly)NSManagedObjectContext *managedObjectContext;
- (NSPersistentContainer *)getCurrentPersistentContainer;
@end
#import "HMCoreDataManager.h"
#import <UIKit/UIKit.h>@interface HMCoreDataManager ()
@property(
nonatomic,
strong)NSManagedObjectContext *managedObjectContext1;
@property(
nonatomic,
strong)NSManagedObjectModel *managedObjectModel;
@property(
nonatomic,
strong)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
-(
NSURL*)getDocumentsUrl
{
return [[[
NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
}
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel !=
nil) {
return _managedObjectModel;}_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:
nil];
return _managedObjectModel;}
-(NSPersistentStoreCoordinator*)persistentStoreCoordinator
{
if (_persistentStoreCoordinator !=
nil) {
return _persistentStoreCoordinator;}_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:
self.managedObjectModel];
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;}
-(NSManagedObjectContext*)managedObjectContext1
{
if (_managedObjectContext1 !=
nil) {
return _managedObjectContext1;}_managedObjectContext1 = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];[_managedObjectContext1 setPersistentStoreCoordinator:
self.persistentStoreCoordinator];
return _managedObjectContext1;
}
#pragma mark -iOS10 CoreData Stack
- (NSPersistentContainer *)persistentContainer
{
if(_persistentContainer !=
nil){
return _persistentContainer;}
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:
nil];_persistentContainer = [[NSPersistentContainer alloc] initWithName:@
"sql.db" managedObjectModel:model];[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * description,
NSError * error) {
NSLog(@
"%@",description);
NSLog(@
"%@",error);}];
return _persistentContainer;
}
#pragma mark - NSManagedObjectContext
- (NSManagedObjectContext *)managedObjectContext
{
float systemNum = [[UIDevice currentDevice]
.systemVersion floatValue];
if(systemNum <
10.0){
return kHMCoreDataManager
.managedObjectContext1;}
else{
return kHMCoreDataManager
.persistentContainer.viewContext;}
}- (NSPersistentContainer *)getCurrentPersistentContainer
{
float systemNum = [[UIDevice currentDevice]
.systemVersion floatValue];
if(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的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。