我有一个存储多个用户详细信息的任务。
@IBOutlet weak var userName: UITextField!
@IBOutlet weak var email_id: UITextField!
@IBOutlet weak var password: UITextField!
我知道在用户默认值中我们可以存储特定键的值并检索它但我想知道如何保存多个值。像密钥应该是我上面提到的email_id,并且所有三个字段都应该是它的值,即使有n个用户,我也需要保留所有细节。
答案 0 :(得分:1)
在这种情况下执行此操作的最佳方法是使用本地数据库,如sqlite。您可以按照this教程处理本地数据库。在您的情况下,您需要一个用户表来存储您的用户。
如果您不想使用本地数据库并使用UserDefault,则确实可以在UserDefault中存储对象数组。只需使用以下代码
UserDefaults.standard.set([YourUserObj], forKey: "users")
let userArr = UserDefaults.standard.array(forKey: "users") as? [YourUserObj]
答案 1 :(得分:1)
1.您可以使用元组存储多个值。
规则:默认对象必须是属性列表 - 即实例 (或对于集合,实例的组合):NSData, NSString,NSNumber,NSDate,NSArray或NSDictionary
如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。
// you can create NSObject model to store into userdefaults
let users = [User(username: "user1", email: "user1@xxx.com", password: "******"), User(username: "user2", email: "user2@xxx.com", password: "******")]
var userDefaults = UserDefaults.standard
let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: teams)
userDefaults.set(encodedData, forKey: "users")
userDefaults.synchronize()
通过解压缩获取数据,如下所示
let decodedUserDetail = userDefaults.object(forKey: "users") as! Data
let decodedUsers= NSKeyedUnarchiver.unarchiveObject(with: decodedUserDetail) as! [Team]
print(decodedUsers)
2.您可以使用对象数组存储多个值。
let userDetails =
[
"username" : "user1",
"email": "user1@xxx.com",
"password" : "******"
]
存储此内容之前获取现有详细信息
let userDefault = NSUserDefaults.standardUserDefaults()
var storedUserDetails = userDefault.objectForKey("userDetails") as? [[String:AnyObject]]
storedUserDetails.append(userDetails )
userDefault.setObject(storedCredentials, forKey: "credentials")
userDefault.synchronize()
答案 2 :(得分:1)
你可以将textField Data保存在字典中作为键值并将该字典附加到Array.So你将获得用户详细信息列表。它不会覆盖,每次单击“保存”按钮之后再创建空字典追加数据。
像那样:class ViewController: UIViewController {
var userDict = [String:Any]()
var userArray = [Any]()
override func viewDidLoad() {
super.viewDidLoad()
}
并在保存按钮单击后保存数据。
@IBAction func SaveBtnTapped(_ sender: Any) {
userDict = [:]
userDict.updateValue(userName.text, forKey: "username")
userDict.updateValue(email_id.text, forKey: "email")
userDict.updateValue(password.text, forKey: "password")
userArray.append(userDict)
}
答案 3 :(得分:0)
创建模型
let currentUser = User(userName: userName.text!, email_id: email_id.text!, password: password.text!)
您可以使用数据实现模型
let listUsers = [User(userName: "user_1", email_id: "email@abc.com", password: "password")]
或列表:
currentUser
现在,您可以使用listUsers
archivedData
或let encodedData = NSKeyedArchiver.archivedData(withRootObject: currentUser)
UserDefaults.standard.set(encodedData, forKey: "currentUser")
UserDefaults.standard.synchronize()
let encodedDataForList = NSKeyedArchiver.archivedData(withRootObject: listUsers)
UserDefaults.standard.set(encodedData, forKey: "listUsers")
UserDefaults.standard.synchronize()
if let data = UserDefaults.standard.data(forKey: "currentUser"){
let _currentUser = (NSKeyedUnarchiver.unarchiveObject(with: data) as? User)!
}
获取存储的用户:
{{1}}
答案 4 :(得分:0)
对于保存用户数据,使用本地数据库是最合适的解决方案。但如果您不想深入了解Core数据/ Sqlite,请使用Realm框架。
使用Realm,您只需拥有一个具有动态属性的用户类&调用基本功能,如
使用
初始化RealmDblet objRealm = try! Realm()
创建用户类
class UserDataModel: Object {
dynamic var name:String = ""
dynamic var ID = ""
// MARK : Primary Key
override static func primaryKey() -> String? {
return "ID"
}
}
使用写入功能
将用户添加到DB中 let obj = UserDataModel(value: ["name": userName,
"ID": userID])
try! objRealm.write {
objRealm.add(obj)
}
从Realm DB中读取对象
return objRealm.objects(UserDataModel.self)