【问题标题】:How to Preload 'Realm' DB into iOS swift3?如何将“领域”数据库预加载到 iOS swift3 中?
【发布时间】:2017-06-05 13:08:18
【问题描述】:

我正在尝试在我的应用程序中实现领域数据库,我有领域数据库,其中包含一些预加载的数据。我搜索了许多堆栈溢出资源,但没有取得任何成功。

到目前为止,我已经完成了以下步骤:

  1. 将 Realm 文件复制到我的应用程序包中
  2. 在应用委托中添加了以下代码:

    path = Bundle.main.path(forResource: "data", ofType: "realm")
    var config = Realm.Configuration(fileURL: NSURL(fileURLWithPath:      path!))
    config.readOnly = true
    
    // Open the Realm with the configuration
    let realm = try! Realm(configuration: config)
    

但这不起作用,请提供一些解决方案。

注意:我不想迁移我的数据库。

提前致谢

【问题讨论】:

    标签: ios swift3 realm


    【解决方案1】:

    下面的代码非常适合我在我的应用程序首次启动期间加载预加载的 Realm 实例:

    let defaultPath = Realm.Configuration.defaultConfiguration.fileURL?.path
    let path = Bundle.main.path(forResource: "default", ofType: "realm")
    if !FileManager.default.fileExists(atPath: defaultPath!), let bundledPath = path {
        do {
            try FileManager.default.copyItem(atPath: bundledPath, toPath: defaultPath!)
        } catch {
            print("Error copying pre-populated Realm \(error)")
        }
    }
    

    【讨论】:

    • 当我尝试将名为“Person”的新模型添加到其中时,它会被添加。但是当我在领域浏览器中打开它时,它只显示一个最初存在的模型,即“医学”。您对领域内部发生的事情有任何想法吗??
    • 你在 if 块之后做let realm = try! Realm() 吗?另外你把这段代码放在哪里了?它应该在 AppDelegate 的func application(didFinishLaunchingWithOptions:)
    • 在我重新安装时删除应用程序后,它没有复制默认值。领域到数据库。我不明白里面发生了什么。
    • 您是否尝试过调试代码?它是否进入 if 语句?如果是,尝试是否失败?
    • 是的,实际上我调试了代码,我发现路径越来越为零。我不明白为什么这条路径为零。我已将 Realm 文件添加到项目包中。
    【解决方案2】:

    在 Xcode Project Navigator 中选择您的领域文件,然后打开文件检查器窗格并检查您当前目标的 Target Membership 框。您的代码已经可以工作了!

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多