Ios 使用数组指针和swift 1.2进行PFSubclassing-致命错误:NSArray元素无法匹配swift数组元素类型
使用swift 1.2,我再也不能用parse子类检索poiter数组,而用另一个parse子类向下转换它 我总是发现错误:Ios 使用数组指针和swift 1.2进行PFSubclassing-致命错误:NSArray元素无法匹配swift数组元素类型,ios,parse-platform,swift,pfsubclassing,Ios,Parse Platform,Swift,Pfsubclassing,使用swift 1.2,我再也不能用parse子类检索poiter数组,而用另一个parse子类向下转换它 我总是发现错误: fatal error: NSArray element failed to match the Swift Array Element type 你有什么想法吗?或者它可能会来 守则: import Foundation class ShotModel : PFObject, PFSubclassing { /** * MARK: Properti
fatal error: NSArray element failed to match the Swift Array Element type
你有什么想法吗?或者它可能会来
守则:
import Foundation
class ShotModel : PFObject, PFSubclassing {
/**
* MARK: Properties
*/
@NSManaged var name: String
@NSManaged var pics: [PicModel]
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
class func parseClassName() -> String! {
return "Shot"
}
}
import Foundation
class PicModel : PFObject, PFSubclassing {
/**
* MARK: Properties
*/
@NSManaged var name: String
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
class func parseClassName() -> String! {
return "Pic"
}
}
// this cause error
var shot: ShotModel = // a shot model get with fetchInBackgroundWithBlock
shot.pics // fatal error: NSArray element failed to match the Swift Array Element type
感谢您的时间问题来自这部分代码:
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
self.registerSubclass()
}
}
ShotModel的registerSubclass()在PicModel的registerSubclass()之前调用
我已在AppDelegate中解决此问题:
PicModel.registerSubclass()
ShotModel.registerSubclass()
不知何故,在
AppDelegate
中注册后,我还必须初始化对象:
PicModel.registerSubclass()
PicModel()
ShotModel.registerSubclass()
ShotModel()
问题在于ShotModel在PicModel之前注册为一个子类。相反,我们可以将PicModel初始化称为ShotModel的初始化 这样,我们通过解析来保留建议的解决方案,并确保以正确的顺序注册类
class ShotModel : PFObject, PFSubclassing {
/**
* MARK: Properties
*/
@NSManaged var name: String
@NSManaged var pics: [PicModel]
override class func initialize() {
var onceToken : dispatch_once_t = 0;
dispatch_once(&onceToken) {
PicModel.initialize()
self.registerSubclass()
}
}
事实上,出于同样的原因,我对parse提出了异议,他们最终用以下内容更新了文档:
请注意,在类收到第一条消息之前不会调用initialize方法,这意味着您需要调用子类上的任何实例或类方法,然后才能向Parse SDK注册。
因此,您需要调用
registerSubclass()
方法,或任何其他方法,以便使用Parse正确注册该类。Castshot
到PFObject
而不是ShotModel
,然后您可以获得shot.valueForKey(“pics”)
。我可以用castShotModel
访问shot.valueForKey(“pics”)
,但我不能向下播放shot.valueForKey(“pics”)
到[PicModel]
尝试将@NSManaged var pics:[PicModel]
更改为“@NSManaged var pics:[PFObject]`我通过强制转换到PFObject
ok解决了同样的问题,但是如何获得PicModel对象数组呢?我试过了,但是当我这样做的时候,我有一个错误:pis as!PicModel
=>无法将“PFObject”类型的值强制转换为“PicModel”
…在Github上找到类似的帖子-。这可能会对您有所帮助。在我将.registerSubclass()调用放在解析初始化之前,这对我来说是行不通的。现在它工作得很好。令人沮丧的bug。谢谢我通过在shotmodel初始化的第一行添加PicModel.initialize()解决了这个问题。出于同样的原因,我实际上对parse提出了一个bug(),他们最终用以下内容更新了文档:请注意,直到类收到第一条消息,initialize方法才被调用,这意味着您需要在子类上调用任何实例或类方法,然后才能将其注册到Parse SDK中。`谢谢。这确实有帮助,这非常有帮助。非常感谢。