检测Realm.io db是否需要迁移 - 如果需要,请将其销毁

时间:2015-05-19 18:58:43

标签: ios swift realm realm-migration

我在不太长时间内使用Realm进行缓存,并且无需跟踪架构版本或在任何时候迁移数据模型。

因此,在数据模型发生变化的任何时候,我的应用程序如何通过吹走默认的Realm并从头开始巧妙地处理差异,而不是崩溃?

提前致谢!

3 个答案:

答案 0 :(得分:3)

自从Swift 2引入了try / catch以来,这对我来说就像是一种魅力。我只是在发布时从我的应用代表处拨打testRealmFile(),之后一切都很酷。

func testRealmFile(){
    do {
        try Realm().objects(Model1)
        try Realm().objects(Model2)
    } catch {
        print("can't access realm, migration needed")
        deleteRealmFile()
    }
}
func deleteRealmFile(){
    if let path = Realm.Configuration.defaultConfiguration.path {
        do{
            try NSFileManager.defaultManager().removeItemAtPath(path)
            print("realm file deleted")
        } catch {
            print("no realm file to delete")
        }
    }
}

答案 1 :(得分:1)

Realm Configuration对象现在有一个名为for (int i = 0; i<peopleArray.size(); i++) { for (int j = 0; j<peopleArray.size(); j++) { LocalDate firstDate = LocalDate.of(Integer.parseInt(peopleArray.get(i).getDOBYear()), Integer.parseInt(peopleArray.get(i).getDOBMonth()), Integer.parseInt(peopleArray.get(i).getDOBDay())); LocalDate secondDate= LocalDate.of(Integer.parseInt(peopleArray.get(j).getDOBYear()), Integer.parseInt(peopleArray.get(j).getDOBMonth()), Integer.parseInt(peopleArray.get(j).getDOBDay())); if(firstDate.isAfter(secondDate)) { Person temp = peopleArray[i]; peopleArray[i] = peopleArray[j]; peopleArray[j] = temp; } } } 的属性(在Objective C中也可用),如果设置为deleteRealmIfMigrationNeeded,则会在需要迁移时自动删除Realm数据库文件。

请注意,如果您在删除数据库文件之前检查是否需要迁移,则可能需要其他一些方法(例如,如果您希望在删除之前进行用户确认)。

答案 2 :(得分:0)

最简单的方法是检查Realm.schemaVersionAtPath(_:)并查看该架构版本是否低于当前架构版本。您还可以关注https://github.com/realm/realm-cocoa/issues/1692,其中建议添加更精确的API(不需要碰撞您的架构版本),以便您检测是否需要迁移。