[英]fatal error: NSArray element failed to match the Swift Array Element type
[英]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.