码迷,mamicode.com
首页 > 其他好文 > 详细

CoreData

时间:2018-01-18 17:19:21      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:rod   save   wait   info   user   lazy   ror   加载   manage   

第一步:

创建NSManagedObjectModel:

加载:Model.xcdatamodeld 文件

 1 lazy var managedObjectModel: NSManagedObjectModel = {
 2 
 3         if self.isTestMode {
 4 
 5             return NSManagedObjectModel.mergedModel(from: Bundle.allBundles)! //连接项目中所有的 .xcdatamodeld 文件为一个datamodel,这是一个非常好的方法,把多个entity放在各自的xcodemodel文件中分开管理,然后用这个函数连接起来生成一个datamodel
 6 
 7         }
 8 
 9         let modelURL = Bundle.main.url(forResource: "Model", withExtension: "momd")!
10 
11         return NSManagedObjectModel(contentsOf: modelURL)!
12 
13         }()

 第二步:

创建 NSPersistentStoreCoordinator

 1 lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
 2 //     创建本地数据库(数据库协调器)
 3         var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
 4         let url = self.applicationDocumentsDirectory.appendingPathComponent("\(self.modelName).sqlite")
 5         var error: NSError? = nil
 6         var failureReason = "There was an error creating or loading the application‘s saved data."
 7         let optionsDictionary = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
 8         let storeType = self.isTestMode ? NSInMemoryStoreType : NSSQLiteStoreType
 9         do {
10             try coordinator!.addPersistentStore(ofType: storeType, configurationName: nil, at: url, options: nil)
11         } catch {
12             do {
13                 try coordinator!.addPersistentStore(ofType: storeType, configurationName: nil, at: url, options: optionsDictionary)
14             } catch {
15                 do {
16                     try FileManager.default.removeItem(at: url)
17                 } catch {
18                     do {
19                         try coordinator!.addPersistentStore(ofType: storeType, configurationName: nil, at: url, options: nil)
20                     } catch {
22                         var dict = [String: AnyObject]()
23                         dict[NSLocalizedDescriptionKey] = "Failed to initialize the application‘s saved data" as AnyObject?
24                         dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject?
25                         
26                         dict[NSUnderlyingErrorKey] = error as NSError
27                         let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
30                         NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
31                         abort()
32                     }
33                 }
34             }
35         }
36         
37         return coordinator
38         }()    

 

 第三步:

数据库关联到缓存区域(托管对象管理)

1 NSManagedObjectContext *context = [CoreDataManager sharedManager].backgroundContext;
2             NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"CDProduct"];
3             request.predicate = [NSPredicate predicateWithFormat:@"orderProduct = nil"];
4             NSArray *results = [context executeFetchRequest:request error:nil];
5             [context performBlockAndWait:^{
6                 for (CDProduct * p in results) {
7                     [context deleteObject:p];
8                 }
9         }    

 

CoreData

标签:rod   save   wait   info   user   lazy   ror   加载   manage   

原文地址:https://www.cnblogs.com/EchoHG/p/8310077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!