在 Swift 中子类化 Parse 的 PFUser
Subclassing Parse's PFUser in Swift
首先,我知道以前有人问过类似的问题,我已经尝试按照 this Whosebug 的建议在这里回答但无济于事。我也尝试添加这个的基本要点作为评论,但我还没有足够的代表:(基本上我正在尝试使用 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"
// }
}
测试结果:
-[PFObject _loadSensitiveUserDataFromKeychainItemWithName:]: unrecognized selector sent to instance 0x7f98ebc1c250
我还在我的桥接页眉中执行以下操作:
#import <Parse/Parse.h>
#import <Parse/PFObject+Subclass.h>
如果我取消评论 "parseClassname() in User.swift" 我得到:
failed: caught "NSInvalidArgumentException", "Cannot initialize a PFUser with a custom class name."
这让我相信设置界面至少部分有效。
根据我看到的所有建议,我似乎无法弄清楚我做错了什么。还有一个 open bug 产生相同的错误消息,但它是由使用 Parse 的本地数据存储引起的,我没有配置任何。
在这一点上,我觉得我遗漏了一些明显的东西,或者我受到了与上述相同的错误的影响。有什么建议吗?
好的,通过反复试验解决了我自己的问题。从本质上讲,它看起来像是 PFUser 中的缓存登录导致了问题。当 Parse 最初加载时,它正在从模拟器加载登录状态,这与新注册的用户子类冲突。
要解决此问题,您可以:
- 重启模拟器。
- 在 AppDelegate 中的 Parse.setApplicationId() 之后立即调用
PFUser.logOut()
以刷新缓存的用户。
希望这对以后的其他人有所帮助!
我通过更改初始视图控制器解决了这个问题。它没有注册用户,因为它没有通过之前 stated/identified 用户是谁的视图控制器。
我具体做了什么:
- 设置初始视图控制器,用于捕获用户身份的控制器,然后继续前往您想要到达的位置。
- 重启模拟器。
首先,我知道以前有人问过类似的问题,我已经尝试按照 this Whosebug 的建议在这里回答但无济于事。我也尝试添加这个的基本要点作为评论,但我还没有足够的代表:(基本上我正在尝试使用 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"
// }
}
测试结果:
-[PFObject _loadSensitiveUserDataFromKeychainItemWithName:]: unrecognized selector sent to instance 0x7f98ebc1c250
我还在我的桥接页眉中执行以下操作:
#import <Parse/Parse.h>
#import <Parse/PFObject+Subclass.h>
如果我取消评论 "parseClassname() in User.swift" 我得到:
failed: caught "NSInvalidArgumentException", "Cannot initialize a PFUser with a custom class name."
这让我相信设置界面至少部分有效。
根据我看到的所有建议,我似乎无法弄清楚我做错了什么。还有一个 open bug 产生相同的错误消息,但它是由使用 Parse 的本地数据存储引起的,我没有配置任何。
在这一点上,我觉得我遗漏了一些明显的东西,或者我受到了与上述相同的错误的影响。有什么建议吗?
好的,通过反复试验解决了我自己的问题。从本质上讲,它看起来像是 PFUser 中的缓存登录导致了问题。当 Parse 最初加载时,它正在从模拟器加载登录状态,这与新注册的用户子类冲突。
要解决此问题,您可以:
- 重启模拟器。
- 在 AppDelegate 中的 Parse.setApplicationId() 之后立即调用
PFUser.logOut()
以刷新缓存的用户。
希望这对以后的其他人有所帮助!
我通过更改初始视图控制器解决了这个问题。它没有注册用户,因为它没有通过之前 stated/identified 用户是谁的视图控制器。
我具体做了什么:
- 设置初始视图控制器,用于捕获用户身份的控制器,然后继续前往您想要到达的位置。
- 重启模拟器。