我试图在我的应用程序核心数据中使用永久性存储。在此应用中,它应该具有本地的一些核心数据实体,但也可以通过iCloud进行同步。
在xcdatamodeld中,我创建了两个分别属于脱机(本地)和在线(iCloud)类型的配置,但是却收到一个奇怪的错误,提示它不能使用相同的容器名称。我不知道是否要为每个要在iCloud上同步的实体需要一个不同的容器。
我也不理解,因为如果我仅使用iCloud同步而不使用任何配置,那么我可以存储不同的实体。
此外,如果每个实体与容器具有1:1的关系,为什么无法删除它,那是没有意义的。
这是我正在使用的代码:
persistentContainer = NSPersistentCloudKitContainer(name: name, managedObjectModel: model)
var defaultDirectoryURL: URL
var descriptors = [NSPersistentStoreDescription]()
for capability in self.dbCapabilities {
if capability.cloudEnable {
defaultDirectoryURL = NSPersistentCloudKitContainer.defaultDirectoryURL()
} else {
defaultDirectoryURL = NSPersistentContainer.defaultDirectoryURL()
}
let url = defaultDirectoryURL.appendingPathComponent(capability.url)
let descriptor = NSPersistentStoreDescription(url: url)
descriptor.configuration = capability.configName
if capability.cloudEnable {
descriptor.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.\(capability.url)")
}
descriptors.append(descriptor)
}
persistentContainer.persistentStoreDescriptions = descriptors