在更新到Swift 1.2之前,子类化PFUser工作得很好,现在我无法使其工作。
我的自定义PFUser级:
public class CustomUser: PFUser, PFSubclassing {
@NSManaged var fullName : String!
@NSManaged var phone : String!
public override class func initialize(){
self.registerSubclass()
}
}
当我在我的代码中使用这个类时,方法调用仍然转到PFUser类:
原因:' - [PFUser fullName]:无法识别的选择器发送到实例 0x17018fbe0'
此行为始于Swift 1.2。我已经将Parse SDK更新为最新版本。
答案 0 :(得分:5)
我刚刚经历过这个。行为的改变是一个巨大的痛苦。在设置Parse应用程序ID之前(通常在应用程序委托中),您需要注册子类。
所以,在你的app delegate ...
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
CustomUser.registerSubclass()
Parse.setApplicationId("XXX", clientKey: "YYY")
......
return true
}
答案 1 :(得分:0)
另一个解决方案似乎是一个单例,在Parse手册中提供如下,它没有任何问题。此代码不仅适用于PFUser的所有子类。如果以这种方式完成,则无需在didFinishLaunchingWithOptions
中注册子类。
class User: PFUser, PFSubclassing {
// MARK: PFUser Subclassing
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken) {
self.registerSubclass()
}
}
// non essential code removed
}