【发布时间】:2018-10-11 14:40:19
【问题描述】:
测试领域,无法向我的测试类添加新属性。遵循文档和一些答案,但两者都不起作用。在我的代码中,即使使用更新的领域,用于迁移的“普通”空默认块也不起作用。
收到此错误
线程 1:致命错误:“尝试!”表达式意外引发错误:Error Domain=io.realm Code=10 “由于以下错误,需要迁移: - 属性 'ComicType.creationDate' 已添加。” UserInfo={NSLocalizedDescription=由于以下错误需要迁移: - 已添加属性“ComicType.creationDate”。错误代码=10}
似乎我没有更改 schemaVersion,但我在“基本”迁移块中更改了。我检查应用程序委托中的架构版本:
let configCheck = Realm.Configuration();
do {
let fileUrlIs = try schemaVersionAtURL(configCheck.fileURL!)
print("schema version \(fileUrlIs)")
} catch {
print(error)
}
我的 AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
}
})
Realm.Configuration.defaultConfiguration = config
_ = try! Realm()
return true
}
我的班级:
import Foundation
import RealmSwift
class ComicType: Object {
@objc dynamic var name : String = ""
@objc dynamic var creationDate : Date? //the new property
}
【问题讨论】:
-
请指定“不工作”。您不需要在迁移块中执行任何操作,Realm 可以处理这样的简单迁移(添加具有默认值的新属性),因此如果空迁移块不起作用,则必须进行其他操作。
-
添加了错误信息
-
您确定您的
schemaVersion只需为1 吗?这是您的第一次迁移吗? -
是的,它是一个测试应用程序,一切正常编辑对象,但测试迁移脚本我无法摆脱这个错误。
-
作为测试,我将您的代码复制并粘贴到一个项目中,并使用 ComicType 原始 creationDate 属性。在代码中,我添加了一些对象。然后我注释掉旧的 CreationDate 并取消注释新的,将 schemaVersion 更改为 2 并运行代码。它工作得很好。然后我对 ComicType 对象进行了一些更改(添加和删除属性等),每次都更新迁移编号并且它工作正常。此外,通过更改可选的 var Date,您期望什么? = nil 到另一个可选变量 creationDate : Date?。该更改不需要迁移。
标签: swift realm realm-migration