Я пытаюсь выполнить миграцию для моего пользовательского файла Realm. Обратите внимание, что в этом проекте у меня есть два пользовательских файла областей поверх файла области по умолчанию: Photo.realm
и Transport.realm
. Я включил новый атрибут в объект Photo следующим образом:
class Photo: Object {
@objc dynamic var id: String? = nil
@objc dynamic var secret: String? = nil
@objc dynamic var server: String? = nil
@objc dynamic var farm: Int = 0
@objc dynamic var imageData: Data? = nil
@objc dynamic var tranport: Transport? //Newly added attribute
}
И хотел бы мигрировать. Я прочитал документы и, поскольку я переношу файл пользовательской области, я изменил код и добавил их в didFinishLaunchingWithOptions
следующим образом:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let defaultConfig = Realm.Configuration()
if let fileURL = defaultConfig.fileURL {
let photoRealmFileURL = fileURL.deletingLastPathComponent().appendingPathComponent("Photo.realm")
let photoMigrationConfig = Realm.Configuration(fileURL: photoRealmFileURL, schemaVersion: 1, migrationBlock: { (migration, oldSchemaVersion) in
if (oldSchemaVersion < 1) {
}
}, objectTypes: [Photo.self])
do {
let _ = try Realm(configuration: photoMigrationConfig)
} catch let error {
print("Migration Error", error.localizedDescription)
}
}
return true
}
В моем HomeController я запускаю свои сферы так:
class HomeController: UICollectionViewController {
var photoRealm = try! Realm()
var transportRealm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
setupRealm()
}
fileprivate func setupRealm() {
let defaultConfig = Realm.Configuration()
if let fileURL = defaultConfig.fileURL {
let photoRealmFileURL = fileURL.deletingLastPathComponent().appendingPathComponent("Photo.realm")
let photoConfig = Realm.Configuration(fileURL: photoRealmFileURL, objectTypes: [Photo.self])
let transportRealmFileURL = fileURL.deletingLastPathComponent().appendingPathComponent("Transport.realm")
let tranportConfig = Realm.Configuration(fileURL: transportRealmFileURL, objectTypes: [Transport.self])
do {
photoRealm = try Realm(configuration: photoConfig)
transportRealm = try Realm(configuration: tranportConfig)
let cars = Transport()
cars.name = "cars"
let planes = Transport()
planes.name = "planes"
try transportRealm.write {
transportRealm.add(cars)
transportRealm.add(planes)
}
} catch let error {
print("Error setting Realm", error.localizedDescription)
}
}
}
При этом мне выдается ошибка:
Тема 1: Неустранимая ошибка: 'попробуй!' Выражение неожиданно вызвало ошибку:
Ошибка домена = код io.realm = 10 "Миграция требуется из-за
следующие ошибки:
- Добавлено свойство «Photo.tranport». "UserInfo = {NSLocalizedDescription = Миграция требуется из-за
следующие ошибки:
- Добавлено свойство 'Photo.tranport'. Код ошибки = 10}
Полагаю, ясно, что миграция выполнена неправильно. Поскольку я переношу пользовательскую область, а не область по умолчанию, в документах не совсем ясно, как ее правильно сделать. Любой совет, пожалуйста? Спасибо.