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)

    }
}