在CloudKit中获取当前用户ID?

问题描述:

如何获取用户的当前UserId?我正在使用下面的代码:在CloudKit中获取当前用户ID?

CKContainer.default().requestApplicationPermission(.userDiscoverability) { (status, error) in 
     CKContainer.default().fetchUserRecordID { (record, error) in 
      if #available(iOS 10.0, *) { 
       CKContainer.default().discoverUserIdentity(withUserRecordID: record!, completionHandler: { (userID, error) in 
        self.currentuserID = userID?.userRecordID 
        print("user record id") 
        print(userID) 

       }) 
      } else { 
       // Fallback on earlier versions 
      } 
     } 

但是在最后currentUserID被设置为nill?有谁知道如何成功获得许可并获得当前用户ID?

+0

你在后续的获取和发现调用之前检查了错误吗?你在哪里运行这段代码?您是否在设备上登录了iCloud? – agibson007

在提取用户信息之前,您应该检查status的值。它可能是这样的...

CKContainer.default().requestApplicationPermission(.userDiscoverability) { (status, error) in 
    switch status 
    { 
     case .granted: 
      print("iCloud is OK") 

     case .initialState: 
      print("The user has not yet decided whether to grant this permission") 
      return 

     case .couldNotComplete: 
      print("An error occurred during the getting or setting of the app permission") 

      if let error = error 
      { 
       print("err @ \(#function) -> \(error.localizedDescription)") 
      } 

      return 

     case .denied: 
      print("The user denied access to the permission.") 
      return 
    } 

    CKContainer.default().fetchUserRecordID { (record, error) in 
     if #available(iOS 10.0, *) 
     { 
      CKContainer.default().discoverUserIdentity(withUserRecordID: record!, completionHandler: { (userID, error) in 
       self.currentuserID = userID?.userRecordID 
       print("user record id") 
       print(userID) 

      }) 
     } 
     else 
     { 
      // Fallback on earlier versions 
     } 
    }