在 NSUserDefaults 键中保存多个值
Save multiple values in NSUserDefaults key
有什么方法可以为 NSUserDefaults
中的同一个键保存多个值吗?我似乎只保存了最后一个值,即使 "Day" 键有多个值。
Day
:
for days in results! {
let nD = DayClass()
nD.dayOfTheWeek = days[“D”] as! String
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(nD.dayOfTheWeek, forKey: “Day”)
}
我已经尝试创建一个数组作为一种可能的解决方案,但是当我将它登录到我的控制台时,我仍然只得到最后一个值:
var emptyArray = [String]()
emptyArray.append(dayOfTheWeek)
print("Array: \(emptyArray)")
print("ArrayCount: \(emptyArray.count)")
var food: [String]
{
get {
if let returnValue =
NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue
} else {
return ["muesli", "banana"] //Default value
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // prints: ["muesli", "banana"] (at first launch)
food = ["cake"]
print(food) // prints: ["cake"]
food += ["spaghetti"]
print(food) // prints: ["cake", "spaghetti"]
food = []
print(food) // prints: []
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // prints: ["muesli", "banana"]
}
let daysArray = ["Sat", "Sun", "Mon", "Tu", "Wed", "Th", "Fri"]
// Set Array Into NSUserDefaults
NSUserDefaults().setObject(daysArray, forKey: "day")
// Retrive Array from NSUserDefaults
if let daysOfWeek = NSUserDefaults().arrayForKey("day") as? [String] {
for item in daysOfWeek {
print(item)
}
}
你可以做到这一点。首先检查prefs中是否已经有Day数组。如果是这样,则将新的 dayOfTheWeek 添加到该数组并存储它。否则创建一个新的并存储它。
for days in results! {
let dayOfTheWeek = days["D"] as! String
//check if there is already an existing Day array in prefs
if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("Day") as? [String] {
//if so append the new value to that array and store it
if existingArr.contains(dayOfTheWeek) == false {
existingArr.append(dayOfTheWeek)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(existingArr, forKey: "Day")
defaults.synchronize()
}
} else {
//create a new array and store it
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([dayOfTheWeek], forKey: "Day")
defaults.synchronize()
}
}
有什么方法可以为 NSUserDefaults
中的同一个键保存多个值吗?我似乎只保存了最后一个值,即使 "Day" 键有多个值。
Day
:
for days in results! {
let nD = DayClass()
nD.dayOfTheWeek = days[“D”] as! String
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(nD.dayOfTheWeek, forKey: “Day”)
}
我已经尝试创建一个数组作为一种可能的解决方案,但是当我将它登录到我的控制台时,我仍然只得到最后一个值:
var emptyArray = [String]()
emptyArray.append(dayOfTheWeek)
print("Array: \(emptyArray)")
print("ArrayCount: \(emptyArray.count)")
var food: [String]
{
get {
if let returnValue =
NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
return returnValue
} else {
return ["muesli", "banana"] //Default value
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
print(food) // prints: ["muesli", "banana"] (at first launch)
food = ["cake"]
print(food) // prints: ["cake"]
food += ["spaghetti"]
print(food) // prints: ["cake", "spaghetti"]
food = []
print(food) // prints: []
NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
print(food) // prints: ["muesli", "banana"]
}
let daysArray = ["Sat", "Sun", "Mon", "Tu", "Wed", "Th", "Fri"]
// Set Array Into NSUserDefaults
NSUserDefaults().setObject(daysArray, forKey: "day")
// Retrive Array from NSUserDefaults
if let daysOfWeek = NSUserDefaults().arrayForKey("day") as? [String] {
for item in daysOfWeek {
print(item)
}
}
你可以做到这一点。首先检查prefs中是否已经有Day数组。如果是这样,则将新的 dayOfTheWeek 添加到该数组并存储它。否则创建一个新的并存储它。
for days in results! {
let dayOfTheWeek = days["D"] as! String
//check if there is already an existing Day array in prefs
if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("Day") as? [String] {
//if so append the new value to that array and store it
if existingArr.contains(dayOfTheWeek) == false {
existingArr.append(dayOfTheWeek)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(existingArr, forKey: "Day")
defaults.synchronize()
}
} else {
//create a new array and store it
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([dayOfTheWeek], forKey: "Day")
defaults.synchronize()
}
}