UserDefault for ios App

时间:2018-03-05 07:08:49

标签: ios swift userdefaults

我正在创建一个应用程序,我希望用户在他们向应用程序注册帐户后一直登录,直到用户决定删除该帐户为止。 它的工作原理类似于whatsapp。我是否正确使用userdefault存储用户密钥在注册期间?然后让我说我有一个registerviewcontroller.swift和一个userviewcontroller.swift,如何从userviewcontroller.swift调用存储在registerviewcontroller.swift中的userdefault用户数据?

我正在使用ios 11和swift 4。 请帮忙。谢谢。

5 个答案:

答案 0 :(得分:0)

registerviewcontroller.swift中的

声明了这样的内容。

let userName=dict["user_name"] as? String

 UserDefaults.standard.set(userName, forKey: "user_name")
来自userviewcontroller.swift的

像这样使用

 let userName  =  UserDefaults.standard.string(forKey: "user_name")

答案 1 :(得分:0)

在userdefault中保存和检索userinfo,你需要像

这样的东西
class Helper {
 static func setUserInfo( userinfo: UserInfo?) {

    if let info = userinfo {

        UserDefaults.standard.setValue(NSKeyedArchiver.archivedData(withRootObject: info), forKey: "USERINFO")

    }
    else {

        UserDefaults.standard.setValue(nil, forKey: "USERINFO")

    }

    UserDefaults.standard.synchronize()

}

static func getUserInfo() -> UserInfo? {

    if let data = UserDefaults.standard.value(forKey: "USERINFO") {

        return (NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as! UserInfo)

    }

    return nil

}
 }

这里是userInfo类//这里我使用的是objectmapper lib,你可能/不需要相应的

class UserInfo: NSObject, NSCoding, Mappable {

var patientId: String?
var authKey : String?



override init() {
    super.init()
}

required init?(map: Map){

}

func mapping(map: Map) {
    patientId <- map["patient_id"]
authKey <- map["authKey"]

}

required init?(coder aDecoder: NSCoder) {
    patientId = aDecoder.decodeObject(forKey: "patientId") as? String
    authKey = aDecoder.decodeObject(forKey: "authKey") as? String

}

func encode(with aCoder: NSCoder) {
    aCoder.encode(patientId, forKey: "patientId")
    aCoder.encode(authKey, forKey: "authKey")

}


}

现在在注册视图控制器中,在viewdidload方法

if let _ = Helper.getUserInfo() { // there is user logged in, i.e. user installed the app and registered earlier
        if let mainModuleTabBar = StoryboardHelper.mainModuleStory().instantiateViewController(withIdentifier: MyTabBarController.controllerIdentifier) as? MyTabBarController {
            let window = (UIApplication.shared.delegate as! AppDelegate).window
            window?.rootViewController = mainModuleTabBar
            window?.makeKeyAndVisible()
        }
        return
    }

答案 2 :(得分:0)

您在Userdefaults中存储的内容可在整个应用程序中访问。它与任何特定的视图控制器有关。

Userdefaults以plist文件的形式存储在应用程序的Data Container中。

存储用户默认值

UserDefaults.standard.setValue("<Value>", forKey: "<Key>")
UserDefaults.standard.synchronize()

访问用户默认值

UserDefaults.standard.value(forKey: "<Value>")

答案 3 :(得分:0)

保存整数,布尔值,字符串,数组,字典,日期等等,但是请注意不要保存太多数据,因为它会减慢Swift 4中应用程序的启动速度

let defaults = UserDefaults.standard
defaults.set(25, forKey: "intkey")
defaults.set(true, forKey: "boolkey")
defaults.set(CGFloat.pi, forKey: "floatkey")

defaults.set("Paul Hudson", forKey: "stringkey")
defaults.set(Date(), forKey: "datestore")

答案 4 :(得分:-1)

要在userdefaults中保存和检索值,应在util方法下使用。

import UIKit

class PersistanceManager: NSObject {

/// Set value in user defaults
///
/// - Parameter key: key for which value to be saved in user defaults
/// - Returns: value to save in user default
static func getPersistenceValueForKey(key : String) -> Any?{
    if let value = UserDefaults.standard.value(forKey: key){
        return value
    }
    return nil
}


/// Retrieve value from user default for the key
///
/// - Parameters:
///   - value: value fetched for the key from user defaults
///   - key: key for which value to be retrived
static func setPersistence(value : Any? , forKey key:String){
    if !key.isEmpty {
        if let value = value {
            UserDefaults.standard.setValue(value, forKey: key)
            UserDefaults.standard.synchronize()
        }
        else {
            UserDefaults.standard.removeObject(forKey: key)
        }
        //Doing the syncronize in async queue. performance Fix
        let persistenceQueue = DispatchQueue(label: "ID")
        persistenceQueue.async(execute: {() -> Void in
            UserDefaults.standard.synchronize()
        })
    }
  }
}