簡體   English   中英

使用數組指針和swift 1.2進行PFSubclassing - 致命錯誤:NSArray元素無法匹配Swift數組元素類型

[英]PFSubclassing with array pointer and swift 1.2 - fatal error: NSArray element failed to match the Swift Array Element type

使用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()
    }
}

registerSubclass()用於ShotModel之前被調用registerSubclass()為PicModel。

我已經在AppDelegate中解決了這個問題:

PicModel.registerSubclass()
ShotModel.registerSubclass()

問題在於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()
        }
    }

不知何故,我必須在AppDelegate注冊后初始化對象:

PicModel.registerSubclass()
PicModel()
ShotModel.registerSubclass()
ShotModel()

我實際上因為同樣的原因提交了一個針對解析的錯誤 ,他們最終用以下內容更新了他們的子類文檔:

Please note that the initialize method is not called until the class receives its first message, meaning that you need to call any instance or class method on your subclass before it will be registered with Parse SDK.

因此,您需要調用registerSubclass()方法,或者使用Parse正確注冊類的任何其他方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM