【发布时间】: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