Xcode 使用NSUserdefault将设计令牌检索为字符串
然后,当我在视图中打印Xcode 使用NSUserdefault将设计令牌检索为字符串,xcode,swift3,push-notification,Xcode,Swift3,Push Notification,然后,当我在视图中打印UserDataSingleton.sharedDataContainer.token时,在我的视图控制器中 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { // Convert token to string let deviceTokenString = device
UserDataSingleton.sharedDataContainer.token
时,在我的视图控制器中
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Convert token to string
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
// Print it to console
print("APNs device token: \(deviceTokenString)")
UserDataSingleton.sharedDataContainer.token = deviceTokenString
它打印零
如何将令牌保存为字符串以将其发送到后端
override func viewDidLoad() {
super.viewDidLoad()
print(UserDataSingleton.sharedDataContainer.token)
显示用户数据辛格尔顿的实现。还设置一个断点,查看在
viewDidLoad
之后是否调用了didRegisterForRemotionTificationswithDeviceToken
,viewDidLoad()
可能比didRegisterForRemotionTificationswithDeviceToken
执行得更快。顺便说一句:有一个字符串(forKey
方法)。@shallow虽然它在代理文件中打印设计令牌,但在我的视图控制器中它为零。请检查我的问题。我在视图中设置它将显示,但仍然为零添加打印行以检查计时。
struct DefaultsKey
{
static let Token = "token"
}
class UserDataSingleton
{
static let sharedDataContainer = UserDataSingleton()
init() {
let defaults = UserDefaults.standard
self.token = defaults.object(forKey:DefaultsKey.Token) as? String
}
var token : String?{
didSet {
let defaults = UserDefaults.standard
defaults.set(token, forKey:DefaultsKey.Token)
}
}