Итак, у меня есть старое ObjC Core Data App, которое я переписываю с нуля в Swift 4.2, но я не могу получить PersistentContainer из Swift, чтобы найти NSManagedObjectModel из ObjC. Приложение уже находится в AppStore, поэтому мне, очевидно, нужна моя новая версия Swift для загрузки текущего магазина, который уже находится на устройстве пользователя.
Когда я распечатываю каталог оригинальной модели ObjC, он показывает мне:
/Users/xxxx/Library/Developer/CoreSimulator/Devices/2DB3B49C-E397-427E-A30C-273C2738B253/data/Containers/Data/Application/7B1BCD4F-91F8-45AD-9634-4F1D71205EEB/Documents/Model.sqlite
... но когда я делаю то же самое в моем переписывании Swift, это показывает мне:
/Users/xxxx/Library/Developer/CoreSimulator/Devices/2DB3B49C-E397-427E-A30C-273C2738B253/data/Containers/Data/Application/AB13D4B1-01E2-477D-B6D1-295F4AD0F1BB/Documents/Model.sqlite
Последняя строка цифр прямо перед каталогом «Документы» сильно отличается.
Поскольку Магазин не находится в той же директории, моя перезапись Swift просто создает совершенно новое хранилище и отправляется оттуда. Интересно, что если я загружу свою старую версию ObjC «поверх», то переписываем Swift в симуляторе, он все равно загружает исходное хранилище обратно - так что, очевидно, есть 2 совершенно разных магазина в двух разных каталогах.
Как мне получить мой текущий переписать Swift, чтобы загрузить старый магазин? Swift 4.2 теперь использует PersistentContainer, и я подумал, что смогу получить оригинальное хранилище, используя следующее:
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
... но все равно не работает. Я все еще не могу найти и перенести старый магазин. Я не могу поверить, что я единственный человек, который испытал это, но для моей жизни не могу найти какие-либо предложения по переполнению стека, которые работают. Мысли кто-нибудь?
Я пробовал
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Model")
let storeDirectory = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
let url = storeDirectory.appendingPathComponent("Model.sqlite")
let description = NSPersistentStoreDescription(url: url)
description.shouldInferMappingModelAutomatically = true
description.shouldMigrateStoreAutomatically = true
container.persistentStoreDescriptions = [description]
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
print("loading stores")
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
Но старая модель магазина все еще не загружается.