迁移失败,因为在迁移之前访问了 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 文件。
我正在使用故事板和一些从 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 文件。