在Swift中对Parse的PFUser进行子类化

Der*_*ing 5 subclassing ios parse-platform swift pfsubclassing

首先,我知道之前已经提出了类似的问题,并且我尝试遵循 stackoverflow答案的建议,但无济于事.我也尝试添加这个的基本要点作为评论,但我还没有足够的代表:(基本上我试图使用PFSubclassing来扩展Parse的PFUser模型.因此,这是我的相应代码:

User.swift:

import Foundation
import CoreLocation

class User : PFUser, PFSubclassing {

    override init() {
        super.init()
    }

    convenience init(email: String!) {
        self.init()

        self.email = email
        self.username = email

    }

    // don't need to call User.registerSubclass() in AppDelegate because this
    // is handling that here
    override class func load() {
        self.registerSubclass()
    }

    // Commented out because this is extending PFUser
    //    override class func parseClassName() -> String! {
    //        return "PFUser"
    //    }
}
Run Code Online (Sandbox Code Playgroud)

测试结果:

-[PFObject _loadSensitiveUserDataFromKeychainItemWithName:]: unrecognized selector sent to instance 0x7f98ebc1c250
Run Code Online (Sandbox Code Playgroud)

我也在我的Bridging-Header中执行以下操作:

#import <Parse/Parse.h>
#import <Parse/PFObject+Subclass.h>
Run Code Online (Sandbox Code Playgroud)

如果我在User.swift中取消注释"parseClassname()",我得到:

failed: caught "NSInvalidArgumentException", "Cannot initialize a PFUser with a custom class name."
Run Code Online (Sandbox Code Playgroud)

这让我相信设置界面至少部分有效.

基于我所见过的所有建议,我似乎无法弄清楚我做错了什么.还有一个开放的错误产生相同的错误消息,但它是由使用Parse的本地数据存储引起的,我还没有配置任何.

在这一点上,我觉得我错过了一些显而易见的东西,或者我受到了上面提到的同样的错误的影响.有什么建议?

Der*_*ing 4

好吧,通过反复试验解决了我自己的问题。本质上,看起来像是缓存的 PFUser 登录造成了问题。当 Parse 最初加载时,它正在从模拟器加载登录状态,这与新注册的 User 子类冲突。

要解决此问题,您可以:

  1. 重新启动模拟器。
  2. 在 AppDelegate 中的 Parse.setApplicationId() 之后调用PFUser.logOut()以刷新缓存的用户。

希望这可以帮助其他人在未来!

  • 我还尝试子类化`PFUser`。当你调用`User.currentUser()`时你得到你的子类吗?因为我得到了一个“PFUser”。 (2认同)