PFObject 子类化:NSArray 元素无法匹配 Swift 数组元素类型

PFObject Subclassing: NSArray element failed to match the Swift Array Element type

我正在尝试为 PFObject (Subclassing) 创建自定义 class,这似乎工作正常,但是当我尝试 convert/use 自定义 class object,作为一个普通的 PFObject,它搞砸了。这是我正在尝试做的事情。

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

注意:我在 AppDelegate 中调用 NewPFObject.registerSubclass() ,然后再设置应用程序 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])
        }

    }
}

最后,我有 use-case,错误发生的地方。

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

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

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

}

use-case处的错误与标题相同:

fatal errror: NSArray element failed to match the Swift Array Element type

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

当尝试多次转换它时,XCode 会说这样做是多余的,而实际上 运行 代码时并没有什么不同。同样的错误。

我真的什么都试过了,关于 PFSubclassing 的每一个 post 和 Whosebug 上的这个错误,似乎都找不到解决方案,所以我希望有人愿意提供帮助我出去!

谢谢!

return 来自 parseClassName 的值必须与 Parse.com 中定义的 class 名称相匹配,因此在您的情况下,parseClassName 需要至 return MyCustomClassInParse

这使 Parse 框架能够将 PFSubclassing class 匹配到 Parse.com class 和 return 适当的对象。如果没有匹配项,那么您只会得到普通的 PFObject 实例,这就是为什么在尝试向下转换时会出现运行时错误的原因。