如何使用 UserDefaults swift 3 提取 JobSeekerID

Posted

技术标签:

【中文标题】如何使用 UserDefaults swift 3 提取 JobSeekerID【英文标题】:How can I extract the JobSeekerID with UserDefaults swift 3 【发布时间】:2017-11-02 16:32:27 【问题描述】:

我正在尝试使用 userDefaults 从我的 api 中获取 jobSeeker ID,但我的响应为 nil。

基本上,我正在做的是:

创建一个帮助类作为 NSObject 并保存令牌(这与我的用户 ID 不同)。

class helper: NSObject 

class func restartApp()
    guard let window = UIApplication.shared.keyWindow else return

    let storyBoard = UIStoryboard(name: "Main", bundle: nil)
    let viewController : UIViewController

    if getApiToken() == nil 
        //go to auth screen
        viewController = storyBoard.instantiateInitialViewController()!
     else 
        //go to main screen
        viewController = storyBoard.instantiateViewController(withIdentifier: "profileNavigationController")
    

    window.rootViewController = viewController

    UIView.transition(with: window, duration: 0.5, options: .transitionFlipFromTop, animations: nil, completion: nil)



class func saveApiToken(token: String)

    //save api token to UserDefailts

    let def = UserDefaults.standard
    def.setValue(token, forKey: "token2")
    def.synchronize()
    restartApp()


class func saveJobSeekerIdDefault(defaultID: String)

    //save userDefaultID to UserDefailts

    let defID = UserDefaults.standard
    defID.setValue(defaultID, forKey: "default_profile_id")
    defID.synchronize()

 restartApp()


class func getApiToken() -> String? 
    let def = UserDefaults.standard
    return def.object(forKey: "token2") as? String


class func getJobseekerID() -> String? 
    let defID = UserDefaults.standard
    return defID.object(forKey: "default_profile_id") as? String


在此之后,初始化器:

class UserProfileDefaults

var userID : String
var defaultProfileType : String
var defaultProfileID : String

init?(profileDefaultsDict: [String:Any])
    guard let userID = profileDefaultsDict["user_id"] as? String,
    let defaultProfileType = profileDefaultsDict["default_profile_type"] as? String,
    let defaultProfileID = profileDefaultsDict["default_profile_id"] as? String else return nil

    self.userID = userID
    self.defaultProfileID = defaultProfileID
    self.defaultProfileType = defaultProfileType


然后,我使用 Alamofire 来获取 id:

 class func userProfileDefault(completion: @escaping( _ error: Error?, _ userProfileDefaults: UserProfileDefaults?) -> Void)

    let url = URLs.profileDefaultsUrl

    guard let api_token = helper.getApiToken() else 
        completion(nil, nil)
        return
    

    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(api_token)",
        "Accept": "application/json"
    ]


    Alamofire.request(url, method: .get, encoding: URLEncoding.default, headers: headers)
        .responseJSON  response in

            switch response.result
            case .failure(let error):
                completion(error, nil)
                print(error)
            case .success(let result):
                let json = JSON(result)
                print(json)

                //Data - JobSeekerDefaults
                guard let jobSeekerDefaults = json["data"].dictionaryObject else 
                    completion(nil, nil)
                    return
                

                let userDefaultsData = UserProfileDefaults(profileDefaultsDict: jobSeekerDefaults)

                //print("Test userID01: \(userDefaultsData?.userID)")


                helper.saveJobSeekerIdDefault(defaultID: "97")

                    completion(nil, userDefaultsData)


            
    

我认为这是获取这些数据的方法,但我得到了 nil 作为回报。 我真的很想有人帮助我,因为我被困在这个问题上很长时间了,这让我发疯了。

【问题讨论】:

【参考方案1】:

更准确地查看您的服务器响应很可能您不匹配它。在UserProfileDefaults 类初始化中,在guard 上设置断点并在profileDefaultsDict 的控制台值中打印,如po profileDefaultsDict。确保您在初始化时提供的模型符合服务器端

【讨论】:

谢谢。我刚刚检查了所有的代码,有一些东西我真的需要改变,比如字典对象到请求中的字符串和一些其他的小东西。效果很好!

以上是关于如何使用 UserDefaults swift 3 提取 JobSeekerID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UserDefaults.standard 在 Swift 3.0 中保持会话?

如何将完整的 UserDefaults 列表放入 tableview - Swift 3

userdefaults 使用问题 swift 3

Swift 3 - UserDefaults 无缘无故自动清除

如何在 swift 中使用 UserDefaults 实现登录/注销导航?

在 Swift 3 中删除 UserDefaults 的单个键值