领域:结果显示为零(不保存或不写)

时间:2015-08-30 04:17:28

标签: ios xcode swift realm

这是我的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变量,而这似乎解决了这个问题。我猜测(我希望有人可以告诉我!),这与我遇到的问题有关 - 这导致了第二部分 - 为什么查询没有产生任何结果?是不是保存,还是没有正确查询?

1 个答案:

答案 0 :(得分:2)

(免责声明:我为Realm工作)

我认为我在那里看到了一些可能导致其中一些问题的事情。

1)当您将Dog对象添加到Realm时,您正在使用Realm()对象,默认情况下,除非您更改它,否则将指向名为的Realm文件您的Documents目录中的default.realm。添加这些对象以及阅读时,您需要指定Dogs Realm文件的路径。

2)这是对的。您需要指定要保存的Realm文件的绝对文件路径。如果您只是指定文件名,那么假设您的意思是iOS设备的根目录,该设备位于应用程序的沙箱之外。

您应该可以通过获取应用程序的文档文件路径来设置文件路径,但随后调用stringByAppendingPathComponent:将文件名添加到最后。

此外,最好调用文件Dogs.realm而不是Dogs.swift。它可能不会对实现产生影响,但会减少混淆。

3)当查询狗对象时,你在那里有一个名为MetricR的对象。这是故意的吗? (它应该只是Dog)。

如果您需要进一步澄清,请告诉我们!谢谢!