gpt4 book ai didi

ios - 如何使用 Realm 以正确的方式对这个 json 进行建模?

转载 作者:行者123 更新时间:2023-11-30 12:26:02 24 4
gpt4 key购买 nike

这是我第一次与Realm我正在尝试对这个 JSON 进行建模,我正在使用 ObjectMapper

  {
companies: [
{
id: "1",
name: "Quisque ut",
logo: "0",
company_categories: [
"1",
"2"
]
}
],
categories: [
{
id: "1",
name: "Category1"
},
{
id: "2",
name: "Category2"
},
{
id: "3",
name: "Category3"
}
]
}

在我的应用程序中,这是我正在实现的代码

class Category: Object, Mappable {
dynamic var id = ""
dynamic var name = ""

required convenience init?(map: Map) {
self.init()
}

func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
}

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

我的目标公司是这样的:

class Company: Object, Mappable {
dynamic var id = ""
dynamic var name = ""
dynamic var logo = ""
let categories = List<Category>()

required convenience init?(map: Map) {
self.init()
}

func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
logo <- map["logo"]

var categories: [String]? = nil
categories <- map["company_categories"]
let realm = try! Realm()

categories?.forEach { category in
let categoryObject = realm.objects(Company.self).filter({ $0.id == category }).first
self.categories.append(categoryObject!)
}
}

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

我收到了这样的错误:

Terminating app due to uncaught exception 'RLMException', reason: 'Can not add objects from a different Realm'

最佳答案

如果我正确理解你的问题,你需要使用 TransformType 来解释如何映射列表

override func mapping(map: Map) {
location <- map["location"]
list <- (map["company_categories"], RealmListTransform<Category>())
}

这是我使用的扩展

class RealmListTransform<T: Object>: TransformType where T: Mappable {

typealias Object = List<T>
typealias JSON = [[String: Any]]

let mapper = Mapper<T>()

func transformFromJSON(_ value: Any?) -> List<T>? {
let result = List<T>()
if let tempArr = value as? [Any] {
for entry in tempArr {
let mapper = Mapper<T>()
let model: T = mapper.map(JSONObject: entry)!
result.append(model)
}
}
return result
}

func transformToJSON(_ value: Object?) -> JSON? {
var results = [[String:Any]]()
if let value = value {
for obj in value {
let json = mapper.toJSON(obj)
results.append(json)
}
}
return results
}

}

关于ios - 如何使用 Realm 以正确的方式对这个 json 进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211707/

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