我对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
}
}
但是,我无法在启动时加载引脚。任何帮助将非常感激。
答案 0 :(得分:0)
如果您在将捆绑的Realm复制到该位置之前已经在目标路径上打开了Realm,那么您所描述的行为就是我期望看到的行为。您可以通过在Realm
初始值设定项和调用removeItemAtURL
的代码上放置一个断点来确认这一点,并查看哪个是第一个。