【发布时间】:2017-06-26 23:09:09
【问题描述】:
我在swift中使用“Realm”和“ObjectMapper”
“Realm”不支持继承,所以我必须像这样制作模型:
class Model1 : Object, Mappable
class Model2 : Object, Mappable
我想创建一个函数来查找具有字符串和主键中的模型名称的本地数据。
func fetchLocal(name : String, key : String)->Object{
switch(name){
case "Model1":
~~~~
return Model1
case "Model2":
~~~~
return Model2
}
}
当我使用这个函数时,将对象转换为 Mappable
if let mappable = fetchLocal(name : "Model1", key: "~~~~") as? Mappable{
let json = mappable.toJSON()
}
然后运行时错误出来,没有消息:
Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x0)
我跟踪到了这个错误,但应用程序在 Mappable.swift 中崩溃了:
public func toJSON() -> [String: Any] {
return Mapper().toJSON(self) <------here
}
我认为原因是函数“fetchLocal”只是返回“Object”而不是“Mappable”,但返回的类显然实现了“Mappable”,所以它通过了“if let as”子句,但调用时出现错误“toJSON()”。
由于“Realm Object”无法实现,我无法创建类似“ObjectMappable : Object, Mappable”的类并让“fetchLocal”函数返回“ObjectMappable”
所以,我认为唯一的选择是让“fetchLocal”函数返回一个实现“Object and Mappable”的类,但我不知道如何。
请帮帮我。
【问题讨论】:
-
请务必查看
ObjectMapper使用 Realm 的示例 (github.com/Hearst-DD/ObjectMapper#objectmapper--realm)。它警告您需要在 Realm 写入事务中调用toJSON()才能使其成功工作。
标签: swift realm objectmapper