好的,所以我有一个预先填充的Realm,我是在Swift 2.0项目的捆绑中构建的。我正在尝试在首次启动时将其复制到我的Documents目录,然后从该位置读取并从那里使用它。看起来我写下了文档,但是Realm不会读入我的let
。这是我如何保存它(这会在磁盘上创建文件,所以我认为一切都很好):
final func copyEmptyDatabaseIfRequired() {
let documentsPath: AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true).first!
let storePath: String = documentsPath.stringByAppendingPathComponent("OohRealm.realm")
if !NSFileManager.defaultManager().fileExistsAtPath(storePath) {
let defaultStorePath : String! = NSBundle.mainBundle().pathForResource("OohRealm", ofType: "realm")
do {
try NSFileManager.defaultManager().copyItemAtPath(defaultStorePath, toPath: storePath)
} catch _ {
// Handle nasty goings-on later. No really.
}
}
}
以下是我在我的数据管理器中尝试将该文件读入本地let
的方式(这是不起作用的,我点击了catch
和我的realm
是nil
:
let fileManager = NSFileManager.defaultManager()
let documentsURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let realmURL = documentsURL.URLByAppendingPathComponent("OohRealm.realm")
do {
realm = try Realm(path: realmURL.absoluteString)
} catch {
//
}
我遇到的一个绊脚石似乎是在Swift 2.0中,Apple真的希望你使用URL而不是Strings与文件系统进行交互,但是Realm希望我给它path
作为一个字符串。这是一个棘手的问题。
我可能在这里做错了什么?
答案 0 :(得分:1)
尝试更改此
realm = try Realm(path: realmURL.absoluteString)
到这个
realm = try Realm(path: realmURL.path!)
NSUrl
用于表示通用URL,可以引用文件以外的内容。 absoluteString
属性还可以标识此URL在前缀中的资源类型。对于文件,它以前缀file://
开头。此前缀字符串不适合与NSFileManager
或NSPathUtilities
等文件系统库一起使用。显然它也不适合Realm
。
如果您知道自己正在处理文件URL,NSUrl
会为您提供path
属性,该属性是文件的绝对路径,适用于文件系统库。
正如一句话,文件系统库是path
的用途之一,但不是唯一目的。