gpt4 book ai didi

ios - Realm 和解析集成 : how to save the realm

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

我正在尝试为我的应用程序创建一个捆绑 Realm 。我认为这应该很简单。由于我已经在 Parse 中拥有所有需要的记录,我只需要:

  • 创建 Realm 模型和对象
  • 加载解析记录到 Realm 对象
  • 拯救王国

因此,我创建了两个 Realm 模型:

class RealmContainer : Object {
dynamic var rContainerId: String! //should be equal objectId from Parse
dynamic var rContainerName: String! //should be equal "name" field from Parse
...
var messages = List<RealmMessage>()

override static func primaryKey() -> String? {
return "rContainerId"
}
}

class RealmMessage : Object {
dynamic var rMessageId: String!
...
dynamic var rParentContainer: RealmContainer!
}

从 Parse 获取结果似乎有效。我的 Realm 对象也很好

    var allUserContainers: [RealmContainer] = [] 

我能够用 Parse 的值填充这个数组。但是当我试图拯救这个 Realm 时,我得到了 a) 什么都没有或 b) 错误消息

我的代码(这个什么也得不到):

let realm = try! Realm()
try! realm.write {
realm.add(self.allUserContainers[0])
print(Realm().path)
print(realm.path)
}

我的代码(这个也什么也得不到):

let realm = try! Realm()
try! realm.write {
realm.create(RealmContainer.self, value: self.allUserContainers[0], update: true)
print(Realm().path)
print(realm.path)
}

我的代码 3(这会给我一条错误消息“由于未捕获的异常‘RLMException’而终止应用程序,原因:‘+[RLMSchema sharedSchema 的非法递归调用”。注意:Swift 对象类的属性不得预先填充来自 Realm 的查询结果"):

//from firstViewController, realm is a global variable
let realm = try! Realm()

//another swift module
try! realm.write {
realm.create(RealmContainer.self, value: self.allUserContainers[0], update: true)
print(Realm().path)
print(realm.path)
}

显然我没有正确理解它应该如何工作,但我尝试了几个 swift/realm 教程,它们实际上很简单。那么,我做错了什么?

更新

因此,我更新了我的代码,使其尽可能简单/可读。我有一个 Dog 类,我正在尝试从 Parse 获取 Dogs 并将它们放入 Realm。

AppDelegate.swift

let realm = try! Realm() //global

狗.swift

class Dog : Object {
dynamic var name = ""
dynamic var age = 0
}

User.swift(getDogs 和 putDogs 函数)

class User {
var newDogs:[Dog] = []
...

func getDogs() {
self.newDogs = []

let dogsQuery = PFQuery(className: "Dogs")
dogsQuery.limit = 100
dogsQuery.findObjectsInBackgroundWithBlock { (currentModes, error) -> Void in
if error == nil {

let tempModes:[PFObject] = currentModes as [PFObject]!

for var i = 0; i < tempModes.count; i++ {
let temp = Dog()
temp.name = currentModes![i]["dogName"] as! String
self.newDogs.append(temp)

}

} else {
print("something happened")
}
}
}

...

func putDogs() {

print(self.newDogs.count)
try! realm.write({ () -> Void in
for var i = 0; i < newDogs.count; i++ {
realm.add(newDogs[i])
}

})
try! realm.commitWrite() //doesn't change anything
}

错误信息还是一样:

Terminating app due to uncaught exception 'RLMException', reason: 'Illegal recursive call of +[RLMSchema sharedSchema]. Note: Properties of Swift Object classes must not be prepopulated with queried results from a Realm

我相信我只是对 Realm 的工作方式有一些普遍的误解,因为它的配置非常简单。

最佳答案

关于您的 RealmSwift 代码:您已正确实现。

当您在 swift 中声明一个 Realm 类时,它是 Object 类的子类。同样对于解析它是 PFObject 的子类。

您的自定义类必须只有一个基类。因此不能同时使用库 Parse 和 Realm 的功能。

如果您必须同时使用 Parse 和 Realm,您需要声明两个不同的类,例如 RealmMessage 和 ParseMessage

从解析中检索 ParseMessage 的数据并将属性复制到 RealmMessage。

为什么要同时使用 Parse 和 Realm ?parse 还通过在 appDelegate 之前编写 Parse.enableLocalDatastore() 来提供本地数据存储

Parse.setApplicationId("key",
clientKey: "key")

关于ios - Realm 和解析集成 : how to save the realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767638/

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