我已经向领域对象添加了一个值(已向WeekReport对象添加了动态var inspectorName =“”),并且我试图迁移领域数据库以包含该值。我试图这样调用迁移块func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil)
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
print("HERE")
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
migration.enumerateObjects(ofType: WeekReport.className()) { oldObject, newObject in
newObject!["inspectorName"] = ""
}
}
})
return true
}
但是似乎didFinishLaunchingWithOptions
在我的错误发生之前没有被调用。
在多视图控制器中,我有let realm = try! Realm()
。在运行应用程序时,Xcode在这里中断:
“由于以下错误,需要迁移:-已添加属性'WeekReport.inspectorName'。” 由于以下错误,UserInfo = {NSLocalizedDescription = Migration是必需的:-已添加属性'WeekReport.inspectorName'。,错误代码= 10}:文件/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang- 800.0.63 / src / swift /
为何不称为迁移blick?从未打印过“ HERE” ...
是否应该在视图控制器中以其他方式定义领域?
如果您将let realm = try! Realm()
视图控制器作为实例变量编写,它将在application: didFinishLaunchingWithOptions
Storyboard之前被调用。要解决此问题,可以lazy var realm = try! Realm()
改用。lazy
推迟创建实例变量,直到访问该变量为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句