EVReflection + Moya + Realm + RxSwift - 无法为 dict 类型创建实例

Posted

技术标签:

【中文标题】EVReflection + Moya + Realm + RxSwift - 无法为 dict 类型创建实例【英文标题】:EVReflection + Moya + Realm + RxSwift - Could not create an instance for type dict 【发布时间】:2017-07-19 13:13:55 【问题描述】:

我无法将以上所有内容放在一起。如果我能得到任何意见,我将不胜感激。

这是我的简短设置:

typealias RealmObject = Object

/// Extension to ignore undefined keys when mapping
extension RealmObject : EVReflectable 
    open override func setValue(_ value: Any?, forUndefinedKey key: String)  

示例领域模型:

class Product: RealmObject 

    dynamic var productId: String = ""  
    let productLanguages = List<ProductLanguage>()

    override static func primaryKey() -> String? 
        return "productId"
    


class ProductLanguage: RealmObject 

    dynamic var productLanguageId: String = ""
    dynamic var languageCode: String = ""
    dynamic var productName: String = ""

    override static func primaryKey() -> String? 
        return "productLanguageId"
    

为了获取产品详细信息,我使用 Moya 和 RxSwift:

func getProduct(productItemKey: String) -> Observable<Product> 
    return provider.request(.product(productId: productItemKey)).map(to: Product.self)

我认为.map(to: Product.self) 不适用于开箱即用的领域列表。对于列表中的每个对象,我都会收到一个错误:

ERROR: Could not create an instance for type 
dict:
    CreateDate = "2015-10-12T11:11:50.013Z";
    IngredientList = "Acao ingredient";
    LanguageCode = "en-US";
    ProductId = "d6bb0084-6838-11e5-9225-00ac14ef2300";
    ProductLanguageId = "f96848d0-df77-4594-99b7-d390bb127891";
    ProductName = Acao;
    Tagline = "The smart drink - 100% organic, vegan energy booster with guara"

还有其他方法可以将 Moya 响应映射到 Realm 对象吗?

非常感谢您的任何意见!

【问题讨论】:

【参考方案1】:

原来这是 EVReflection 中的一个错误。在 4.17.0 中修复

【讨论】:

以上是关于EVReflection + Moya + Realm + RxSwift - 无法为 dict 类型创建实例的主要内容,如果未能解决你的问题,请参考以下文章

带有 NSManagedObject 的 EVReflection 崩溃/不工作

Moya使用

RxSwift+Moya+Moya_ObjectMapper+MJRefresh,刷新失败?

如何从 Moya 框架中禁用 Moya_Logger

如何使用 Moya 下载文件

Moya + Alamofire 验证每个请求