Swift 在UserDefaults中存储多个数组
想知道是否可以在iOS UserDefaults存储中存储阵列。我有一个不同配置文件的屏幕,在订购过程中将用作预定义的输入。没有用户登录系统,因此我计划为此使用UserDefaults模块,而不是在线数据库存储 所需阵列:Swift 在UserDefaults中存储多个数组,swift,nsuserdefaults,Swift,Nsuserdefaults,想知道是否可以在iOS UserDefaults存储中存储阵列。我有一个不同配置文件的屏幕,在订购过程中将用作预定义的输入。没有用户登录系统,因此我计划为此使用UserDefaults模块,而不是在线数据库存储 所需阵列: [ "Profile 1" : ["title" : "Ing.", "salutation" : "Herr", "fullname" : "Franz Bernstein Stiglitz"
[
"Profile 1" : ["title" : "Ing.",
"salutation" : "Herr",
"fullname" : "Franz Bernstein Stiglitz"
"phone" : "13001300",
"email" : "john2doe@example.com",
],
"Profile 2" : ["title" : "Dr.",
"salutation" : "Herr",
"fullname" : "Joseph Keusch"
"phone" : "06606666800",
"email" : "jkeusch_1974@example.com",
],
]
我有这个带模型的结构,使用它,我可以在没有阵列逻辑的情况下存储为单个KVS
struct OrderingProfiles {
static let (titleKey, salutationKey, fullnameKey, phoneKey, emailKey) = ("title", "salutation", "fullname", "phone", "email")
static let userSessionKey = "com.save.usersession"
struct OrderingProfile {
var title: String?
var salutation: String?
var fullname: String?
var phone: String?
var email: String?
init(_ json: [String: String]) {
self.title = json[titleKey]
self.salutation = json[salutationKey]
self.fullname = json[fullnameKey]
self.phone = json[phoneKey]
self.email = json[emailKey]
}
}
static var saveOrderingProfile = { (title: String, salutation: String, fullname: String, phone: String, email: String) in
UserDefaults.standard.set([titleKey: title, salutationKey: salutation, fullnameKey: fullname, phoneKey: phone, emailKey: email], forKey: userSessionKey)
}
static var getOrderingProfile = { _ -> OrderingProfile in
return OrderingProfile((UserDefaults.standard.value(forKey: userSessionKey) as? [String: String]) ?? [:])
}(())
static func clearUserData(){
UserDefaults.standard.removeObject(forKey: userSessionKey)
}
}
如果你的反应是这样的
[
"Profile" : ["title" : "Ing.",
"salutation" : "Herr",
"fullname" : "Franz Bernstein Stiglitz"
"phone" : "13001300",
"email" : "john2doe@example.com",
],
"Profile" : ["title" : "Dr.",
"salutation" : "Herr",
"fullname" : "Joseph Keusch"
"phone" : "06606666800",
"email" : "jkeusch_1974@example.com",
],
]
使用第三方模型映射尝试此代码
图书馆连结:-
1个模型班
2检索数据
var arrayProfile:[ProfileData] = []
let defaults = UserDefaults.standard
guard let profile_data = defaults.object(forKey: "profile") as? NSData else {
print("'profile' not found in UserDefaults")
return
}
guard let placesArray = NSKeyedUnarchiver.unarchiveObject(with: profile_data as Data) as? [ProfileData] else {
print("Could not unarchive from profile_data")
return
}
for place in placesArray
{
arrayProfile.append(place)
}
在我的例子中,100%工作时,最好尝试使用此使您的结构可编码,并将json数据保存到应用程序首选项文件夹中的文件。要添加到Leo的评论中,UserDefaults不适用于应用程序数据。我明白,这是为了一些小事情,比如偏好。在这种情况下,您如何看待核心数据?取决于您有多少数据。@rmaddy我开始使用。它完全符合我的需要。虽然从技术上讲,这可能符合OP的要求;我之所以投反对票是为了将来的观众,因为这是滥用用户默认值。在iOS上本地存储数据有很多种方法,而保存为用户默认值并不是其中之一。我同意你的看法。但问题是在UserDefaults中存储多个数组,所以这就是我发布此答案的原因
var arrayProfile:[ProfileData] = []
var arrprofile:[ProfileModel] = []
let defaults = UserDefaults.standard
for data in arrprofile
{
arrayProfile.append(data)
}
let saveProfileData = NSKeyedArchiver.archivedData(withRootObject: arrayProfile)
defaults.set(saveProfileData, forKey: "profile")
defaults.synchronize()
var arrayProfile:[ProfileData] = []
let defaults = UserDefaults.standard
guard let profile_data = defaults.object(forKey: "profile") as? NSData else {
print("'profile' not found in UserDefaults")
return
}
guard let placesArray = NSKeyedUnarchiver.unarchiveObject(with: profile_data as Data) as? [ProfileData] else {
print("Could not unarchive from profile_data")
return
}
for place in placesArray
{
arrayProfile.append(place)
}