У меня есть модель, которая уже была передана в производство, и я хотел бы переместить атрибут в новую сущность в виде отношения.
Из этого:
extension Note {
@NSManaged public var drawingData: Data?
....
}
В Это:
extension Note {
@NSManaged public var drawing: Drawing?
....
}
extension Drawing {
@NSManaged public var drawingData: Data?
....
}
В соответствии с Apple Docs в разделе «Обновление вашей производственной схемы» , мне нужно будет перейти на новый контейнер CloudKit, так как мы не можем удалить атрибуты на "production" CKRecords.
Перенесите пользователей в совершенно новое хранилище, используя NSPersistentCloudKitContainerOptions, чтобы связать новое хранилище с новым контейнером.
Я прочитал всю документацию и каждый свой блог удалось найти в NSPersistentCloudKitContainer, но на самом деле никто не знает, как с этим справиться.
Предлагаемое решение
Мне нужно иметь 2 переменные для двух разных контейнеров, «старого» и «нового».
lazy var oldPersistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "Model")
let storeLocation = URL(fileURLWithPath: "/path/to/cloud.store")
let storeDescription =
NSPersistentStoreDescription(url: storeLocation)
// Set the container options on the cloud store
cloudStoreDescription.cloudKitContainerOptions =
NSPersistentCloudKitContainerOptions(
containerIdentifier: "com.myCompany.myApp")
container.loadPersistentStores...
...
}()
/// NOTE: - `containerIdentifier` has been "bumped"
lazy var newPersistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "Model")
let storeLocation = URL(fileURLWithPath: "/path/to/cloud.store")
let storeDescription =
NSPersistentStoreDescription(url: storeLocation)
// Set the container options on the cloud store
cloudStoreDescription.cloudKitContainerOptions =
NSPersistentCloudKitContainerOptions(
containerIdentifier: "com.myCompany.myApp2")
// TODO: Migrate Core Data Store if needed
container.loadPersistentStores...
...
}()
ПРИМЕЧАНИЕ: newPersistentContainer
будет иметь «выпуклый» containerIdentifier
, а также будет выполнять перенос основных данных.
Тогда я думаю, что мне нужно будет вручную переместить все записи из oldPersistentContainer
и добавить их в newPersistentContainer
. Как только все данные были перемещены в новый контейнер, я удалил бы все записи из oldPersistentContainer
. Будет ли этого достаточно с точки зрения очистки oldPersistentContainer
?
Мне потребовалось некоторое время, чтобы придумать этот рабочий процесс, и я не уверен, что это «правильный» способ справиться с этим. Вот как мы должны обрабатывать миграцию контейнеров с помощью NSPersistentCloudKitContainer?