Ios 使用数组指针和swift 1.2进行PFSubclassing-致命错误:NSArray元素无法匹配swift数组元素类型

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

使用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: 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正确注册该类。

Cast
shot
PFObject
而不是
ShotModel
,然后您可以获得
shot.valueForKey(“pics”)
。我可以用cast
ShotModel
访问
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中。`谢谢。这确实有帮助,这非常有帮助。非常感谢。