我从领域文档复制并粘贴代码。但是不知道如何更改我在旁边评论的那部分来表示。 (在底部) 以下是我收到的完整错误消息:
初始化新领域时出错,错误域= io.realm代码= 10“由于以下错误,需要迁移: -已添加属性'Item.dateCreated'。“ UserInfo = {NSLocalizedDescription = Migration是必需的,由于以下错误: -已添加属性“ Item.dateCreated”。,错误代码= 10} 2018-07-30 21:25:24.231575-0400 Todoey [87561:3063712] ***由于未捕获的异常'RLMException'终止了应用程序,原因:类'Category'的属性名称'dateCreated'无效。'
以下是我尝试迁移的女巫中的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
print(Realm.Configuration.defaultConfiguration.fileURL)
do {
let realm = try Realm()
} catch {
print("error initializing newrealm, \(error)")
}
//Migration
let config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
migration.enumerateObjects(ofType: Category.className()) { (old, new) in
new!["dateCreated"] = Date()
}
migration.enumerateObjects(ofType: Item.className()) { (old, new) in
new!["dateCreated"] = Date()
}
}
})
Realm.Configuration.defaultConfiguration = config
//Migration X
return true
}
问题似乎出在“ //将名称字段组合成一个字段”注释所在的位置。我需要将这些值更改为以下内容:
class Item: Object {
@objc dynamic var title: String = ""
@objc dynamic var done: Bool = false
@objc dynamic var dateCreated = NSDate() //this is the new data
var parentCategory = LinkingObjects(fromType: Category.self, property: "items")
}
答案 0 :(得分:1)
问题是已添加到领域数据库中的新属性。
当您在模拟器中运行您的应用程序时,它将拉起没有此新属性的旧领域数据库。
在Xcode 10,Swift 4.2中运行的解决方案:
注意:这将从旧的领域数据库中删除所有数据并重新开始。
希望这会有所帮助。
答案 1 :(得分:0)
在您的情况下-由于您仅添加了一个新属性-您需要做的就是将模式版本增加到2,而Realm将负责其余的工作。