簡體   English   中英

在 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)")
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)
  }
}

你可以這樣做。 首先檢查首選項中是否已經有一個 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()
    }
}
   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"]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM