2015-09-29 96 views
1

我正在使用故事板和一些viewcontrollers作为默认属性值从域中获取?由于该应用程序在调用application(_:didFinishLaunchingWithOptions:)之前访问Realm。所以每次应用程序启动时都会引发异常,并尝试进行Realm迁移。迁移失败,因为在迁移之前访问Realm

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

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

回答

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(),如果它抛出一个异常(如果需要执行迁移,将会发生异常),捕获异常并使用它来简单地从磁盘删除Realm文件。

+0

感谢您的回答!有用。至于删除领域文件的诡异方式,我不确定是否有一个不太好用的方法,最好是Realm的官方API可以实现相同的结果。 – JDG

+0

不用担心!很高兴我能帮上忙!是的,我很好奇,如果有一个原因,为什么选择自动删除旧的架构Realm文件不包括在领域配置功能。我会调查那一个! – TiM

+1

感谢您的指导。工作很好。缺少的唯一步骤是确保从目标的“常规>部署信息>主界面”设置中删除“主”。 – tracicot