无法初始化PFObject子类

时间:2015-04-11 19:29:57

标签: ios swift parse-platform

升级到Xcode 6.3 6D570(和Swift 1.2)后,子类对象的init不能编译。 假设我有一个名为Armor的类,它继承自PFObject,PFSubclassing(正如Parse文档所说)。

当我尝试创建一个实例时,如var armor = Armor(),我得到以下编译错误:

  

在调用

中缺少参数'className'的参数

然后我在Parse文档中读到我应该使用'object'类方法来初始化子类对象。所以我试着这样做:var armor = Armor.object()

但后来我得到以下编译错误:

  

'object()'不可用:使用对象构造'PFObject()'

我正在使用Parse SDK 1.7.1版。

我还覆盖了parseClassName方法,如下所示:

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

我在初始化方法和app appate之前注册了子类,然后才设置Parse:

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

如何正确初始化子类对象?

2 个答案:

答案 0 :(得分:4)

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

这已经在1.7.3 PARSE SDK中修复了 你可以在这里下载新版本: https://parse.com/docs/downloads

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

虽然文档不清楚,但不再需要在Swift中使用.object()。 正如here所述,并在Swift代码段中找到了here

现在,这是怪异但要使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很快就会解决问题。

另外reported as a bug

答案 1 :(得分:0)

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()