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。 私は長い間このことに執着しているので、誰かが私を助けてくれると嬉しいです。
ありがとうございます。私はちょうどすべてのコードをチェックしました。辞書オブジェクトをリクエストの文字列に変換するなど、本当に変更する必要のあるものがいくつかありました。それはうまくいっている! – Khromos