【发布时间】:2019-06-12 10:16:59
【问题描述】:
我正在尝试对我的自定义领域文件进行迁移。请注意,在这个项目中,我在默认领域文件之上有两个自定义领域文件,一个 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:致命错误:“尝试!”表达式意外引发错误: Error Domain=io.realm Code=10 "需要迁移,因为 以下错误: - 属性 'Photo.tranport' 已添加。" UserInfo={NSLocalizedDescription=迁移是必需的,因为 以下错误: - 已添加属性“Photo.tranport”。错误代码=10}
我想很明显迁移没有正确完成。由于我正在迁移自定义领域而不是默认领域,因此文档不太清楚如何正确执行此操作。
【问题讨论】: