【问题标题】:Realm : Results showing up as nil (either not saving or not writing)领域:结果显示为零(不保存或不写入)
【发布时间】:2015-08-30 04:17:27
【问题描述】:

这是我的 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

所以我的问题的第 1 部分:我添加了 filesPath、realmPath 和 pathToFile 变量,因为之前,当我只是将“Dogs.swift”而不是 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 变量,这似乎解决了这个问题。我猜(我希望这里有人能告诉我!),这与我遇到的问题有关 - 这导致了第二部分 - 为什么查询没有产生任何结果?是不保存,还是查询不正确?

【问题讨论】:

    标签: ios xcode swift realm


    【解决方案1】:

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

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

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

    2) 没错。您需要指定要保存的 Realm 文件的绝对文件路径。如果您只指定文件名,则假定您指的是您的 iOS 设备的根目录,它不在您应用的沙箱中。

    您应该能够像以前一样通过获取应用的 Documents 文件路径来设置文件路径,然后调用 stringByAppendingPathComponent: 将文件名添加到末尾。

    另外,最好调用文件Dogs.realm 而不是Dogs.swift。它可能对实现没有影响,但不会那么混乱。

    3) 在查询 dogs 对象时,您会在其中找到一个名为 MetricR 的对象。这是故意的吗? (应该是Dog)。

    如果您需要进一步说明,请告诉我!谢谢!

    【讨论】:

    • 啊,非常感谢!我刚刚传入了 Realm() 的路径,它现在可以工作了!非常感谢您的帮助:)
    • 太棒了!很高兴听到你成功了!为此非常感谢! :) 如果您需要其他帮助,请告诉我! :)
    • 实际上是快速跟进 - 所以如果我使用多个对象,每次实例化一个新的 Realm() 时,我是否会继续为领域传递不同的路径?例如,当我对狗对象做任何事情时,realm = Realm(dogPath),当我对所有者对象做事情时,realm = Realm(ownerPath)?
    • 别担心!是的,你当然可以这样做,但这意味着主人和狗都将被保存到磁盘上两个完全独立的 Realm 文件中。除非有特定的技术原因,否则将所有内容保存到单个 Realm 文件可能会更容易。 :)
    • 好的!那么这是否意味着我应该将所有类放在同一个文件中??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多