如何为CoreData添加新的持久性存储?

时间:2016-03-25 06:13:14

标签: ios objective-c swift core-data

我正在使用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中的实体做同样的事情(例如执行一些获取请求)?

也许我的理解并不完全正确,我的一些问题无效,请酌情回答。

1 个答案:

答案 0 :(得分:0)

我建议你可以在1个xcdatamodeld文件中配置2个数据库。然后使用配置来切换持久存储

coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: configuration_1, URL: url, options: option)

references