我正在使用CoreData,有些数据需要与iCloud同步,有些数据不需要。我做了一些研究,我发现解决方案是have separate persistent stores。
我正在使用一些预先生成的代码,以默认方式使用CoreData而没有问题:
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("MyAppCoreData.sqlite")
do {
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
} catch {
}
return coordinator
}()
lazy var managedObjectContext: NSManagedObjectContext = {
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
默认情况下,XCode MyApp.xcdatamodeld
中还创建了一个文件,我可以在其中添加/修改实体。
现在我想添加一个新的持久性商店(比如商店2),这是我的问题:
(1)我打算像这样添加新的持久性商店:
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url_2, options: option_2)
我还需要添加其他东西吗?
(2)如果我想为商店2添加/修改实体,我应该创建一个新的store2.xcdatamodeld
文件吗?该文件如何与实际代码链接?
(3)当我想访问一个实体时,我会这样做:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "ContentViewData")
// ...
managedContext.executeFetchRequest(fetchRequest)
如何为商店2中的实体做同样的事情(例如执行一些获取请求)?
也许我的理解并不完全正确,我的一些问题无效,请酌情回答。
答案 0 :(得分:0)
我建议你可以在1个xcdatamodeld文件中配置2个数据库。然后使用配置来切换持久存储
coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: configuration_1, URL: url, options: option)