解析SDK和Swift 1.2:不能将PFUser子类化

时间:2015-04-15 20:58:14

标签: ios swift parse-platform

在更新到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更新为最新版本。

2 个答案:

答案 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
}