我正在尝试更新Schema版本,以便可以添加性地更改Schema(只添加一个属性而不影响现有记录)。
我在加载主屏幕视图时运行了以下代码:
var configCheck = Realm.Configuration();
do {
let fileUrlIs = try schemaVersionAtURL(configCheck.fileURL!)
print("schema version \(fileUrlIs)")
} catch {
print(error)
}
架构版本为0。
然后,我将以下内容添加到onload函数中:
var config = Realm.Configuration.defaultConfiguration
config.schemaVersion = 2
let realm = try! Realm(configuration: config)
configCheck = Realm.Configuration();
do {
let fileUrlIs = try schemaVersionAtURL(configCheck.fileURL!)
print("schema version \(fileUrlIs)")
} catch {
print(error)
}
当我尝试写入数据库时,收到以下错误:
浏览次数:483次致命错误:"try!"表达式意外引发错误:Error Domain = io. realm Code = 1 "提供的架构版本0低于上次设置的版本2。" UserInfo = {NSLocalizedDescription =提供的架构版本0低于上次设置的版本2。,Error Code = 1}
2023 - 01 - 23 14:33:30.862303 + 0400应用程序名称[87285:5267261]实时雨燕/雨燕用户界面。雨燕:483:致命错误:"try!"表达式意外引发错误:Error Domain = io. realm Code = 1 "提供的架构版本0低于上次设置的版本2。" UserInfo = {NSLocalizedDescription =提供的架构版本0低于上次设置的版本2。,Error Code = 1}
我不确定这个错误意味着什么,因为我以为我已经更新了模式版本(现在运行原始代码显示模式版本2)。
2条答案
按热度按时间k10s72fa1#
虽然另一个答案是好的,但如果唯一的变化是附加的(如问题中所示),它可以大大简化
换句话说,如果存在现有的模型并且 * 添加了 * 一个属性,那么迁移就变成了三行代码。
例如,如果当前方案版本为4,并且向模型中添加了属性,则只需执行以下操作
如果您有AppDelegate,或者在需要Realm更新它之前的任何时候,都可以在AppDelegate中调用它。
7fhtutme2#
我想通了。
创建一个新类RealmMigrator:
您也可以在这里执行更复杂的迁移操作,请参见this video for example on how to amend existing records。
在应用程序入口点(名为[AppName]. swift)中,我在正文中添加了最后一行: