CoreDataManager-OC版-相容iOS10以前的版本

來源:互聯網
上載者:User

標籤:事務   執行個體化   void   str   code   nts   file   res   添加   

標頭檔:

 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 stack15 // 如果重寫了唯讀屬性的 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 資料庫檔案的 URL43          4> 設定資料庫選項44          */45         NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;46         NSString *path = [cacheDir stringByAppendingPathComponent:@"ys.db"];47         // 將本地檔案的完整路徑轉換成 檔案 URL48         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 support63 - (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

 

CoreDataManager-OC版-相容iOS10以前的版本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.