我需要两个不同的CoreData数据库存储,具体取决于我的应用程序运行的模式。只需在应用程序首次运行时进行切换。
理想情况下,这将使用persistentContainer进行设置:
lazy var persistentContainer: NSPersistentContainer =
{
let container = NSPersistentContainer(name: "myApp")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError?
{
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
}
我基本上只需要找到如下命令:
if mode == 1
{
storeName = "MyStore1.sqlite"
}
else
{
storeName = "MyStore2.sqlite"
}
container.useStore(storeName)
答案 0 :(得分:1)
你走在正确的轨道上。概括地说,典型配置包括单个NSManagedObjectContext
,其中需要NSPersistentStoreCoordinator
,而NSManagedObjectModel
则需要NSPersistentStoreCoordinator
。如果您希望在前端和持久性存储之间有一个中间步骤,则上下文可以在其上方具有另一个上下文。
无论哪种方式,你都有几个选择(可能还有更多):
NSManagedObjectContext
(请参阅this answer)NSPersistentStoreCoordinator
实例,每个实例都有自己的NSManagedObjectModel
和mode == 1
。 选项#2在代码管理方面会有点笨拙,所以如果你只担心数据的物理存储位置,我会选择#1选项。否则,您可能想要创建某种上下文管理器来正确监督每个上下文(您也可以将model == 2
/ RewriteRule ^/guit/(.+) /guiwordpress/wp-content/themes/storefront/$1 [L,QSA]
逻辑放在这里)以确保它们不会踩到彼此的脚趾。
答案 1 :(得分:1)
使用 int check_odd(unsigned long n) {
if (n / 10 == 0) {
return n % 2 != 0 ? 1 : 0;
}
else {
return (n % 10 % 2 != 0? 1:0)+check_odd(n/10);
}
}
初始化持久性容器时,该名称用于定位模型和持久性存储。来自the docs:
默认情况下,提供的名称值用于命名持久性存储,用于查找要与NSPersistentContainer对象一起使用的NSManagedObjectModel对象的名称。
但是您可以使用另一个初始化程序init(name:)
,它允许您为模型和商店指定单独的名称。来自the docs:
默认情况下,容器的提供名称值用作与容器关联的persisent商店的名称。传入NSManagedObjectModel对象会使用提供的名称值覆盖模型的查找。
因此,只需在初始化持久性容器时指定正确的名称和managedObjectModel参数,即可实现所需。