升级到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()
}
}
如何正确初始化子类对象?
答案 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
很快就会解决问题。
答案 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()