gpt4 book ai didi

ios - Realm : Results showing up as nil (either not saving or not writing)

转载 作者:搜寻专家 更新时间:2023-11-01 07:31:30 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

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

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

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

关于ios - Realm : Results showing up as nil (either not saving or not writing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com