领域迁移,无法添加属性

时间:2018-10-11 14:40:20

标签: swift realm realm-migration

测试领域,无法向我的测试类添加新属性。遵循了文档,并在此处给出了一些答案,但两者均无法正常工作。在我的代码中,即使使用更新的领域,迁移的“普通”空默认块也不起作用。

遇到此错误

  

线程1:致命错误:“尝试!”表达式意外引发错误:Error Domain = io.realm Code = 10“由于以下错误,需要迁移:   -已添加属性'ComicType.creationDate'。“ UserInfo = {NSLocalizedDescription =由于以下错误,需要迁移:   -已添加属性“ ComicType.creationDate”。,错误代码= 10}

似乎我没有更改schemaVersion,但在“基本”迁移块中做了。我使用以下命令在应用程序委托中检查架构版本:

df.write.option("truncate", "true").jdbc(url=DATABASE_URL, table=DATABASE_TABLE, mode="overwrite", properties=DATABASE_PROPERTIES)

我的AppDelegate:

 let configCheck = Realm.Configuration();
        do {
            let fileUrlIs = try schemaVersionAtURL(configCheck.fileURL!)
            print("schema version \(fileUrlIs)")
        } catch  {
            print(error)
        }

我的班级:

  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
    }

2 个答案:

答案 0 :(得分:1)

问题是通过这种方式解决的:真正的问题不在于模式编号,而是关于根本不调用迁移代码,我意识到迁移模式始终保持不变。真正的错误是在我的视图控制器中调用let realm = try! Realm()并将其用作全局常量。现在使用lazy var realm = try! Realm()找到了here的帮助。现在,在模型中进行每次更改之后,我都在appDelegate中更新了schemaVersion。

答案 1 :(得分:0)

起作用的是从iOS模拟器中删除该应用程序,然后使用XCode再次运行它。有关更多信息,请参见:https://github.com/RocketChat/Rocket.Chat.iOS/issues/104

我遇到了类似的问题,我的错误堆栈跟踪是这样开始的:

`fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors:

显示的错误只是确认某些对象已保存在本地。因此,没有任何原因可以导致问题。

我发现的问题是,由于我更新了本地保存的对象类,因此违反了Realm数据库的架构。因此,它要求我更新架构。

我想在删除应用程序并再次运行时会创建一个新的Realm文件。如果是这样,那么将创建一个与最新代码一起使用的新架构