【问题标题】:Using custom model class with Backendless in Swift在 Swift 中使用带有 Backendless 的自定义模型类
【发布时间】:2016-05-16 07:10:47
【问题描述】:

我正在尝试使用我在 Backendless 官方文档上在线找到的函数从在线数据存储中检索数据!但是当我尝试使用像 Lista(我自己的类)对象这样的角色时,我收到错误消息:无法将类型“__NSDictionaryM”(0x10c1ccfc0)的值转换为“InLIsta_.Lista”(0x108439790)。 我在这个网站上搜索,但答案并不特定于 Backendless 案例,所以我希望任何人都可以帮助我

这是我的代码(显然我已经声明了所有的 var 并让代码运行所必需):

class Lista : NSObject {

    var nome: String?
    var pr: String?
    var pagamento = 0
    var entrato: Bool = false
    var commenti: String?
    var objectId: String?
    var created: NSDate?
    var updated: NSDate?
}

func findQ() {

    Types.tryblock({ () -> Void in

        let startTime = NSDate()

        let found = self.backendless.persistenceService.of(Lista.ofClass()).find(self.query)

        let currentPage = found.getCurrentPage()
        print("Loaded \(currentPage.count) name objects")
        print("Total name in the Backendless storage - \(found.totalObjects)")

        for person in currentPage {
            let persona = person as! Lista  // here i get error
            print("Restaurant <\(Lista.ofClass())> name = \(persona.nome)")
            self.nomi.append(persona.nome!)
        }

        print("Total time (ms) - \(1000*NSDate().timeIntervalSinceDate(startTime))")
        },

                   catchblock: { (exception) -> Void in
                    print("Server reported an error: \(exception as! Fault)")
        }
    )
}

【问题讨论】:

  • 显然根据错误信息currentPage是一个字典数组而不是Lista对象
  • 你注册了你的自定义类了吗?
  • 是的,我已经注册了我的自定义类,就像在 Backendless 文档中解释的那样,事实上我可以正确地将数据保存在存储中,但我可以检索它!那么我该如何解决呢?

标签: ios swift backendless


【解决方案1】:

后端持久性服务有一个方法-(void)mapTableToClass:(NSString *)tableName type:(Class)type;,您需要为每个自定义类调用该方法,以便在反序列化期间使用它们。

self.backendless.persistenceService.mapTableToClass("Lista", type: Lista.self)

这需要在进行任何调用以使用持久性服务之前完成。

请注意,如果未在 obj-c 中定义类,则必须将其导出到 obj-c。请注意,这也意味着您不能有任何选项。

理想情况下,您应该使用平台代码生成来创建模型类定义,以确保使用适当的类型创建所有属性。类型不匹配或名称不匹配可能导致无法映射到您的自定义类。在当前的 SDK 实现中,选项总是会失败。

【讨论】:

  • 我不确定是否了解您的所有信息!这是为了objective-c?
  • SDK是obj-c,不能处理所有的swift特性
  • 所以我必须在我的声明中使用@objc 属性,然后在我的swift项目中创建一个类的桥接头?
  • Backendless 提供桥接头,在问题中显示你的模型类
  • 你需要删除所有的选项,?s
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多