这是我的Dog.Swift文件:
import RealmSwift
class Dog : Object {
dynamic var name : String = ""
dynamic var age : Int8 = 0
}
这是我打电话的地方:
let realm = Realm()
var myDog = Dog()
myDog.name = "Fido"
myDog.age = 5
realm.write{
realm.add(myDog)
}
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
let realmPath = documentsPath.stringsByAppendingPaths(["Dogs.swift"])
let pathToFile = realmPath[0] as! String
let allDogs = Realm(path: pathToFile).objects(MetricR)
println(allDogs)
println(allDogs.count)
向控制台输出哪些内容:
Results<MetricR> (
)
0
所以我的问题的第一部分:我添加了documentsPath,realmPath和pathToFile变量,因为之前,当我只是传入&#34; Dogs.swift&#34;而不是pathToFile到查询,我得到一个错误,说:
"Terminating app due to uncaught exception 'RLMException', reason: 'open() failed: Permission denied
Unable to open a realm at path 'Dogs.swift'. Please use a path where your app has read-write permissions.'",
之后我将文件的权限更改为777,没有做任何事情,所以我传入了pathToFile变量,而这似乎解决了这个问题。我猜测(我希望有人可以告诉我!),这与我遇到的问题有关 - 这导致了第二部分 - 为什么查询没有产生任何结果?是不是保存,还是没有正确查询?
答案 0 :(得分:2)
(免责声明:我为Realm工作)
我认为我在那里看到了一些可能导致其中一些问题的事情。
1)当您将Dog对象添加到Realm时,您正在使用Realm()
对象,默认情况下,除非您更改它,否则将指向名为的Realm文件您的Documents目录中的default.realm
。添加这些对象以及阅读时,您需要指定Dogs
Realm文件的路径。
2)这是对的。您需要指定要保存的Realm文件的绝对文件路径。如果您只是指定文件名,那么假设您的意思是iOS设备的根目录,该设备位于应用程序的沙箱之外。
您应该可以通过获取应用程序的文档文件路径来设置文件路径,但随后调用stringByAppendingPathComponent:
将文件名添加到最后。
此外,最好调用文件Dogs.realm
而不是Dogs.swift
。它可能不会对实现产生影响,但会减少混淆。
3)当查询狗对象时,你在那里有一个名为MetricR
的对象。这是故意的吗? (它应该只是Dog
)。
如果您需要进一步澄清,请告诉我们!谢谢!