我正在关注有关迁移的Realm文档以及将域与应用程序捆绑在一起。
我使用以下代码将捆绑的Realm复制为默认Realm。效果很好。
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 =试试! Realm(),它返回的结果总是空的。
应该注意的是,我在AppDelegate.swift
的顶部有以下声明import UIKit
import RealmSwift
let uiRealm = try! Realm()
我不确定这个uiRealm的初始全球声明是否导致了这个问题。我也尝试过声明本地版本,但这似乎并没有解决它。
应该注意的是,如果我在Realm文件已经存在的情况下重新运行应用程序,那么一切都很好。
答案 0 :(得分:1)
感谢您澄清代理顶部的uiRealm
实例化。我很确定这会导致这个问题。
Realm缓存其Realm
实例的内部副本,因此,如果您要在磁盘上移动任何文件,那么在创建任何Realm()
对象之前执行此操作非常重要(或者执行任何Realm创建Realm
个实例的操作,封装在@autoreleasepool
)中。
在这种情况下,您应该确保只有在完成初始文件设置后才会首先触摸uiRealm
。