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

Migration fail because Realm accessed before migration

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

有办法解决这个问题吗?

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

如果您无法控制 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 设置后执行此操作。

如果您在开发过程中不断调整模型对象并且暂时不需要处理迁移,一种可能的(但有点老套)方法是在第一个简单地调用 Realm()时间,如果它抛出异常(如果它需要执行迁移,它将抛出异常),捕获异常并使用它简单地从磁盘中删除 Realm 文件。