从 Swift 中的捆绑领域数据库加载数据

Loading Data from Bundled Realm Database in Swift

我对 Realm 比较陌生。我的任务是捆绑一个 RealmDB 并使其可写。到目前为止,我已经将捆绑的领域文件复制到项目中,并在应用程序委托中实现了以下代码。在“func application(application: UIApplication, didFinishLaunchingWithOptions”上面,我使用了以下函数:

func bundleURL(name: String) -> NSURL? {
  return NSBundle.mainBundle().URLForResource("data", withExtension: "realm") }

在 didFinishLaunchingWithOptions 下面,我使用了以下内容:

if let v0URL = bundleURL("data.realm") {
        do {
            try NSFileManager.defaultManager().removeItemAtURL(defaultURL)
            try NSFileManager.defaultManager().copyItemAtURL(v0URL, toURL: defaultURL)
        } catch {}

问题是我必须加载应用程序两次才能让数据显示在 MapViewController 中,这是启动时的第一个控制器。在这种情况下,我希望 MapViewController 中的地图引脚在构建时自动出现。我尝试使用以下方法在 MapViewController 中实现通知:

let results = try! Realm().objects(Spaces)
notificationToken = results.addNotificationBlock {[weak self](changes: RealmCollectionChange<Results<Sapces>>) in 
self!.populateMap()

我还尝试实现了一个数据库管理器:

func getDBItems() -> [Spaces] {
 let dbItemsFromRealm  = try! Realm().objects(Spaces)
    var bathroom = [Spaces]()

    if dbItemsFromRealm.count > 0 {
        for dbItemsInRealm in dbItemsFromRealm {
            let spaces = dbItemsInRealm as Spaces
            space.append(space)
        }
    }
    return space
}

}

但是,我无法在启动时加载图钉。任何帮助将非常感激。

如果您在将捆绑的 Realm 复制到该位置之前已经在目标路径打开了 Realm,那么您描述的行为就是我希望看到的。您可以通过在 Realm 初始值设定项和调用 removeItemAtURL 的代码上放置断点并查看先命中哪个来确认这一点。