将 Realm 与应用程序和迁移捆绑在一起
Bundling Realm with App and Migration
我正在关注有关迁移和将领域与应用程序捆绑在一起的领域文档。
我正在使用以下代码将捆绑的领域复制为默认领域。效果很好。
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(),它returns的结果总是空的。
需要注意的是,我在AppDelegate.swift
的顶部有如下声明
import UIKit
import RealmSwift
let uiRealm = try! Realm()
我不确定 uiRealm 的这个初始全局声明是否导致了这个问题。我也尝试过声明本地版本,但这似乎无法解决问题。
需要注意的是,如果我在 Realm 文件已经存在的情况下重新运行应用程序,一切都很好。
感谢您澄清委托顶部的 uiRealm
实例化。我很确定这就是导致问题的原因。
Realm 缓存其 Realm
实例的内部副本,因此,如果您要在磁盘上移动任何文件,请在创建任何 Realm()
对象(或任何创建 Realm
个实例的领域操作,封装在 @autoreleasepool
).
中
在这种情况下,您应该确保仅在完成初始文件设置后才首先触摸 uiRealm
。
我正在关注有关迁移和将领域与应用程序捆绑在一起的领域文档。
我正在使用以下代码将捆绑的领域复制为默认领域。效果很好。
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(),它returns的结果总是空的。
需要注意的是,我在AppDelegate.swift
的顶部有如下声明import UIKit
import RealmSwift
let uiRealm = try! Realm()
我不确定 uiRealm 的这个初始全局声明是否导致了这个问题。我也尝试过声明本地版本,但这似乎无法解决问题。
需要注意的是,如果我在 Realm 文件已经存在的情况下重新运行应用程序,一切都很好。
感谢您澄清委托顶部的 uiRealm
实例化。我很确定这就是导致问题的原因。
Realm 缓存其 Realm
实例的内部副本,因此,如果您要在磁盘上移动任何文件,请在创建任何 Realm()
对象(或任何创建 Realm
个实例的领域操作,封装在 @autoreleasepool
).
在这种情况下,您应该确保仅在完成初始文件设置后才首先触摸 uiRealm
。