从 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
的代码上放置断点并查看先命中哪个来确认这一点。
我对 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
的代码上放置断点并查看先命中哪个来确认这一点。