2017-11-02 3 views
0

userDefaultsを使用してapiからjobSeeker IDを取得しようとしていますが、応答としてnilがあります。UserDefaults swiftでJobSeekerIDを抽出する方法3

基本的に、私がやっていることは次のとおりです。

は、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 
} 
} 

はその後、私はIDを取得するためにAlamofireを使用:

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を持つm。 私は長い間このことに執着しているので、誰かが私を助けてくれると嬉しいです。

答えて

0

あなたのサーバーの応答をより正確に見ると、おそらくそれは不一致です。 UserProfileDefaultsクラスの初期化では、guardにブレークポイントを設定し、profileDefaultsDictのコンソール値でpo profileDefaultsDictのように印刷します。サーバ側に準拠して初期化したモデルをご確認ください

+0

ありがとうございます。私はちょうどすべてのコードをチェックしました。辞書オブジェクトをリクエストの文字列に変換するなど、本当に変更する必要のあるものがいくつかありました。それはうまくいっている! – Khromos

関連する問題