开发者社区> 问答> 正文

变量值在IOS Swive中为空

我已经为存储strTokenValue创建了计算属性,并将其发送到Web服务。

private var strTokenValue = String()
    var tokenValue: String {
        get {
            if strTokenValue != "" {
                return strTokenValue
            }
            else {
                if let token = StrongBoxController.sharedInstance.keychainStore.unarchive(objectForKey: "TokenValue") as? Data {
                    strTokenValue = StrongBoxController.sharedInstance.convertDataToString(value: token)
                    return strTokenValue
                }
                else {
                    return ""
                }
            }
        }
        set {
            strTokenValue = ""
            StrongBoxController.sharedInstance.saveValues(value: "\(newValue)", key: “TokenValue”)
        }
    }

我们已经异步发送每个用户操作,并且没有等待跟踪函数Web服务的成功响应,所以我没有在下面的代码中添加成功和失败响应。

func track(actionTaken: String,incidentNumber: String,message: String,completion:@escaping(_ success: Bool, _ error: String,_ actionTakenName: String) -> Void ) {
        DispatchQueue.global(qos: .background).async {
            let url = "\(ServerCommunication.sharedInstance.getDomainBaseUrl())api/track"
            let parameters = [
                “token_value” : self.tokenValue,
                "device_os":"iOS",
                "device_type": UIDevice.modelName,
                "action_taken": actionTaken,
                "message" : message,
            ]
       }
 }

我们已经调用了另一个Web服务来发送图像和令牌值。

请求:

“token_value” : “”,
        "device_os":"iOS",
        "device_type": “iPhone X”,
        "action_taken": “Image captured”,
        "message" : “”,
func convertDataToString(value: Data) -> String {
    return String(decoding: value, as: UTF8.self)
}



public func unarchive(objectForKey key:String) -> Any? {
    guard let data = self.data(forKey: key) else {
        return nil
    }

    let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data)
    return unarchiver.decodeObject(forKey: key)
}


 @objc func saveValues(value : String, key: String) {
  _ = self.keychainStore.archive(convertStringToData(value: value), key: key, accessibility: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
 }

在某些情况下,在trackActions Web服务中,同时调用的Web服务和“TokenValue”都会变为空

展开
收起
游客5akardh5cojhg 2019-12-05 22:20:00 689 0
1 条回答
写回答
取消 提交回答
  • 问题似乎是使用convertStringToData可能不会用convertStringToData...我想是因为convertDataToString不使用NSKeyedAarchiver...为了解决问题,您应该使用unarchive...保存数据使用

    func convertDataToString(value: Data) -> String? {
            return String(data: value, encoding: .utf8)
        }
        func convertStringToData(value: String) -> Data? {
            return value.data(using: .utf8)
        }
    
    

    keychainStore.archive(convertStringToData(value: value), key: key, accessibility: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
    
    
    stored = convertDataToString(StrongBoxController.sharedInstance.keychainStore.unarchive(objectForKey: "TokenValue"))
    
    
    2019-12-05 22:21:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Java_Android to Swift iOS 立即下载
From Java/Android to Swift iOS 立即下载
低代码开发师(初级)实战教程 立即下载