【问题标题】:Bundling Realm with App and Migration将 Realm 与应用程序和迁移捆绑在一起
【发布时间】:2016-09-04 20:39:32
【问题描述】:

我正在关注有关迁移和将领域与应用捆绑在一起的领域文档。

我正在使用以下代码将捆绑的 Realm 复制为默认 Realm。效果很好。

let initialURL = NSBundle.mainBundle().URLForResource("bootstrap_v001", withExtension: "realm")!
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!

if Realm.Configuration.defaultConfiguration.schemaVersion == 0 {
    do {
        try NSFileManager.defaultManager().removeItemAtURL(defaultURL)
        try NSFileManager.defaultManager().copyItemAtURL(initialURL, toURL: defaultURL)
    } catch {
        // Handle error here
        print("realm delete copy error!!")
    }
}

这一切正常,我可以看到其中包含数据的正确 Realm 文件。但是,如果我使用领域 = 试试! Realm(),它返回的结果总是空的。

需要注意的是,我在 AppDelegate.swift 的顶部有如下声明

import UIKit
import RealmSwift
let uiRealm = try! Realm()

我不确定这个 uiRealm 的初始全局声明是否会导致问题。我也尝试过声明本地版本,但这似乎无法解决问题。

应该注意的是,如果我在 Realm 文件已经就位时重新运行应用程序,一切都很好。

【问题讨论】:

    标签: ios swift swift2 realm realm-migration


    【解决方案1】:

    感谢您澄清代表顶部的 uiRealm 实例化。我很确定这就是导致问题的原因。

    Realm 缓存其 Realm 实例的内部副本,因此如果您要在磁盘上移动任何文件,请在创建任何 Realm() 对象之前执行此操作(或执行任何 Realm 操作,其中 @987654324 @实例被创建,封装在@autoreleasepool)中。

    在这种情况下,您应该确保只有在完成初始文件设置后才首次触摸 uiRealm

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2018-12-19
      相关资源
      最近更新 更多