【问题标题】:PFObject Subclassing: NSArray element failed to match the Swift Array Element typePFObject 子类化:NSArray 元素无法匹配 Swift Array 元素类型
【发布时间】:2015-12-19 17:05:37
【问题描述】:

我正在尝试为 PFObject(子类化)创建一个自定义类,这似乎工作正常,但是当我尝试将自定义类对象转换/使用为常规 PFObject 时,它搞砸了。这就是我想要做的。

首先我创建了名为NewPFObject的自定义类出于测试原因。

注意:我正在调用 NewPFObject.registerSubclass() 在 AppDelegate 中设置应用程序 ID。

class NewPFObject: PFObject, PFSubclassing {

    static func parseClassName() -> String {
        return "NewPFObject"
    }

    override init(className:String) {
        super.init(className: className)
    }

}

然后我有了这个方法,使用它来使异步调用更容易和流畅:

func GetAsyncObjects(query:STARCQuery, doNext: (dataObjects:[NewPFObject]) -> ()) {
    query.findObjectsInBackgroundWithBlock { (newObjects:[PFObject]?, error:NSError?) -> Void in

        if error == nil {
            doNext(dataObjects: newObjects as! [NewPFObject])
        }

    }
}

最后,我有错误发生的用例。

let query:PFQuery = PFQuery.init(className: "MyCustomClassInParse")

GetAsyncObjects(query) { (dataObjects) -> () in

    if(dataObjects.count > 0) {
        for customObject in dataObjects {
            //Do something with customObject data
        }
    }

}

用例处的错误与标题相同:

致命错误: NSArray 元素未能匹配 Swift Array 元素类型

它发生在最后一个代码块上,在我在 for 循环中使用 dataObjects 数组的那一行。

当尝试多次强制转换时,XCode 会说这样做是多余的,并且在实际运行代码时没有任何区别。同样的错误。

我什么都试过了,每一篇关于 PFSubclassing 和 Stackoverflow 上的这个错误的帖子,似乎都找不到解决办法,所以我希望有人愿意帮助我!

谢谢!

【问题讨论】:

  • 您正在使用NewPFObject,然后突然切换到MyCustomClassInParse,这是一个错字还是您真的使用了两个不同的类名?您是否使用调试器查看了dataObjects 并查看了 NSArray 内部的内容?
  • @Paulw11,“MyCustomClassInParse”是 Parse 云中的实际类。 NewPFObject 是设备上的物理类(脚本)。 dataObjects 包含 PFObject 作为 NewPFObject 的子类,这就是我感到困惑的原因。
  • @Paulw11,我很确定 PFQuery 与 PFObject 或 NewPFObject 没有任何关系。
  • parseClassName返回的类名必须是Parse中的类名。这就是框架如何将返回的数据映射到您的自定义子类。由于它不匹配,你只会得到一个 PFObject 数组
  • @Paulw11 哇。实际上就是这样。你是完全正确的。但是,我将如何使用任何 Parse 类使这项工作普遍/动态地工作呢?

标签: ios arrays swift parse-platform subclassing


【解决方案1】:

您从 parseClassName 返回的值必须与 Parse.com 中定义的类名匹配,因此在您的情况下,parseClassName 需要返回 MyCustomClassInParse

这使 Parse 框架能够将 PFSubclassing 类与 Parse.com 类匹配并返回适当的对象。如果没有匹配,那么你只会得到普通的PFObject 实例,这就是为什么你在尝试向下转换时会遇到运行时错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多