Realm架构版本0小于最后一个版本1 Swift

时间:2016-05-12 00:51:31

标签: ios uitableview realm

我更新了我的数据模型并在应用程序中编写了迁移:每个Realm文档中的didFinishLaunchingWithOptions:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let config = Realm.Configuration(

        schemaVersion: 1,


        migrationBlock: { migration, oldSchemaVersion in

            if (oldSchemaVersion < 1) {

            }
    })

           Realm.Configuration.defaultConfiguration = config

        let realm = try! Realm()

我的初始VC有一个tableView,并嵌入一个调用领域的导航控制器中,如下所示:

class AllRoundsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
let realm = try! Realm()

当我这样离开时,我的应用程序在发布时崩溃,说“致命错误:'试试!'表达式意外地引发了错误:Error Domain = io.realm Code = 0“提供的模式版本0小于上次设置的版本1.”UserInfo = {NSLocalizedDescription =提供的模式版本0小于上次设置的版本1.}

然而,当我在导航控制器的前面放置一个虚拟VC时,只需一个简单的按钮即可切换到导航控制器,一切正常。我知道这与在初始VC之前或之后加载的appDidFinishLaunchingWithOptions有关。

我的问题是,如何在仍然调用try时停止崩溃!我最初的VC上的Realm()?我不想在tableView中保留一个毫无意义的VC,只是为了加载正确的架构。

由于

2 个答案:

答案 0 :(得分:0)

在对一个不相关的问题进行一些领域研究之后,我遇到了解决这个问题的方法。这是解决方案的链接! link

How can I get the migration to run before the app starts to run the code?

答案 1 :(得分:-1)

我遇到了同样的问题。我收到此错误:Realm schema version 1 is less than last set version 3 Swift

以下是需要做的:

public lazy var realmConfig: Realm.Configuration = {

    var config = Realm.Configuration()

    config.schemaVersion = 3 //the old code is 'config.schemaVersion = 1'

    config.migrationBlock = { newSchemaVersion, oldSchemaVersion in
        if oldSchemaVersion < 3 {}
        if oldSchemaVersion < 2 {}
        if oldSchemaVersion < 1 {}
    }
    return config
}()

当您使用config.schemaVersion = 3运行应用程序时,领域不能设置为低于3。因此您最好不要使用appbuild(kCFBundleVersionKey)来设置realmConfig.schemaVersion