簡體   English   中英

無法初始化PFObject子類

[英]Could not init a PFObject subclass

升級到Xcode 6.3 6D570(和Swift 1.2)后,無法編譯子類對象的初始化。 假設我有一個名為Armor的類,該類繼承自PFObject,PFSubclassing(正好是Parse文檔所說的那樣)。

當我嘗試創建實例時,例如var armor = Armor() ,出現以下編譯錯誤:

呼叫中缺少參數'className'的參數

然后,我在Parse文檔中讀到,我應該使用“對象”類方法來初始化子類對象。 所以我試圖這樣初始化: var armor = Armor.object()

但是然后我得到以下編譯錯誤:

'object()'不可用:使用對象構造'PFObject()'

我正在使用Parse SDK版本1.7.1。

我還重寫了parseClassName方法,如下所示:

class func parseClassName() -> String {
    return "Armor"
}

在設置Parse之前,我將子類注冊在Initialize方法內部和應用程序委托中:

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

我應該如何正確地初始化一個子類對象?

================================================== =======================

此問題已在1.7.3 PARSE SDK中修復,您可以在此處下載新版本: https : //parse.com/docs/downloads

================================================== =======================

盡管文檔尚不清楚, .object()不再需要在Swift中使用.object()了。 如說在這里和在發現了斯威夫特的代碼片段在這里

現在,這很奇怪,但是要使Armor()正常工作,您需要以某種方式在同一文件中引用PFUser類。 也許不必是PFUser但我沒有更深入地研究它。

所以這行不通

import UIKit
import Parse
import Bolts

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        Parse.setApplicationId("appID", clientKey: "clientKey")

        let myArmor = Armor()

        return true
    }
}

但這會

import UIKit
import Parse
import Bolts

private let fix = PFUser.hash() // here's the weird trick

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        Parse.setApplicationId("appID", clientKey: "clientKey")

        let myArmor = Armor()

        return true
    }
}

希望這會Parse幫助,並且Parse盡快推出修復程序。

報告為錯誤

將類注冊為AppDelegate的子類,但要在Parse.initialize之前。 然后可以delete overwritten function initialize

這將使:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]!) -> Bool {

        Armor.registerSubclass()

        // Further initialization

        return true
    }

然后只需通過調用構造函數來初始化類:

var myArmor = Armor()

暫無
暫無

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

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