从Swift

时间:2017-01-04 06:17:14

标签: swift realm mapbox

我对Realm相对较新。我的任务是捆绑一个RealmDB并使其可写。到目前为止,我已将捆绑的realm文件复制到项目中,并在app delegate中实现了以下代码。在" func应用程序之上(应用程序: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
}

}

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

1 个答案:

答案 0 :(得分:0)

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