迁移失败,因为Realm在迁移之前已访问

时间:2015-09-29 21:39:49

标签: ios realm

我正在使用故事板和一些从Realm获取的viewcontrollers作为默认属性值?因此,应用程序在调用application(_:didFinishLaunchingWithOptions:)之前访问Realm。因此,每次应用程序启动并尝试执行Realm迁移时,基本上都会引发异常。

有没有办法解决这个问题?

此外,由于我们处于开发阶段,并且我们不希望每次更改Realm对象模型时都要处理迁移,有没有办法只清除Realm文件并在迁移时重新开始检测到需要?我发现在github(https://github.com/realm/realm-cocoa/issues/1692)上报告了一个问题,但似乎没有提供解决方案。 PS,我正在使用最新的Realm for iOS。

1 个答案:

答案 0 :(得分:5)

如果您无法控制iOS自动加载故事板的顺序与应用委托方法相比,我建议您从应用的info.plist中删除初始故事板设置文件,只需手动设置并显示在您应用的代理中:

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

    let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    let initialViewController = storyboard.instantiateInitialViewController()

    self.window = UIWindow(frame:UIScreen.mainScreen().bounds)
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()

    return true
}

这将允许您在加载故事板时显式控制,让您在初始Realm设置之后执行此操作。

如果您在开发过程中经常调整模型对象并且还不需要处理迁移,那么一种可能的(但稍微有些hacky)方法就是简单地调用Realm()第一次,如果它抛出一个异常(如果它需要执行迁移将会发生),捕获异常并使用它来简单地从磁盘中删除Realm文件。