解析 - 使用 'includeKey' 的查询未在适当的子类中获得 objects

Parse - Query with 'includeKey' not getting objects in proper subclass

我正在尝试获取一个 Parse object、'Pack',它有一个指向另一个 parse class、'Cards' 的指针数组。 当我查询 'Pack' 并包含 'includeKey("cards")' 时,它实际上会下载那些 object,但无法将它们转换为我的子 class 'Card' 和相反默认为 "PFObject"。 当试图在 'pack' 中遍历 'cards' 并打印标题时,它给我一个类型不匹配错误:

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

在调试器中检查 'pack' object,我发现 'cards' 属性(数组)具有所有预期的 object,但它们显示为 'PFObject' class.

解析'Pack'子class:

class Pack: PFObject, PFSubclassing {    
    override class func initialize() {
        var onceToken : dispatch_once_t = 0;
        dispatch_once(&onceToken) {
            self.registerSubclass()
        }
    }

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

    var cards: [Card] {
        get {
            return self["cards"] as! [Card]
        }
        set {
            self["cards"] = newValue
        }
    }

    ... other properties...
}

正在获取解析 Object "Pack":

func fetchPackWithTitle(title: String) -> Pack {
    if let query = Pack.query() {
        query.whereKey("title", equalTo:"\(title)")
        query.includeKey("cards")
        do {
            let results = try query.findObjects()
            if results.count > 0 {
                // Found it...
                return results.first as? Pack
            }
        } catch {
            return nil
        }
    }
    return nil
}

正在尝试为包中的卡片打印卡片标题:

if let pack = fetchPackWithTitle("Basic") {
    for card in pack.cards {
        print("Title: \(card.title)")
    }
}

解决了问题。有问题的 class 实际上保存了一个不包含预期指针的坏对象,而 subclass 隐式解包指针数组:

var cards: [Card] {
    get {
        return self["cards"] as! [Card]
    }
    set {
        self["cards"] = newValue
    }
}

更新到这里并解决了问题:

var cards: [Card]? {
    get {
        return self["cards"] as? [Card]
    }
    set {
        self["cards"] = newValue
    }
}