【发布时间】:2017-05-27 00:23:32
【问题描述】:
这是我第一次使用 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"
}
}
我收到这样的错误:
由于未捕获的异常“RLMException”而终止应用程序,原因:“无法添加来自不同领域的对象”
【问题讨论】:
-
我的建议是在没有 ObjectMapper 的情况下尝试所有过程。我认为问题出在引用中,如果引用对 Realm 至关重要,那么 ObjectMapper 创建的新对象就是问题所在。在我看来,您在与 (let categories = List
()) 相关的代码中有错误的逻辑,首先是您声明变量的方式,其次是您尝试检索类别的方式,第三是为什么嵌套在类中但不是嵌套在 JSON 中,这不是编程的工作方式,ObjectMapper 也是如此。祝你好运。 -
我同意达米安的观点。此外,您分享的代码片段不完整,至少有一个编译错误(
realm.objects(Company.self)应该是realm.objects(Category.self)),您还没有分享如何触发您看到的异常(快速尝试Company(JSONString: ...不适用于您提供的 JSON,因为您有一组 Company 对象)。您需要提供更多信息以供他人帮助。