簡體   English   中英

(Swift) 將數組存儲和檢索到 NSUserDefaults

[英](Swift) Storing and retrieving Array to NSUserDefaults

我正在嘗試將數組存儲到NSUserDefaults並在需要填充UITableView時檢索該數組。

目前我正在使用:

//store data
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")                    
NSUserDefaults.standardUserDefaults().synchronize()

//retrieve data
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")
myArray = [tabledata!]
tableView.reloadData()

但我得到

致命錯誤:在解開 Optional 值時意外發現nil

嘗試加載數據時。 我不確定問題出在存儲還是檢索中。 有沒有人經歷過這個?

從你的代碼我看到你正在存儲一些數組

// Your code
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "\(identity.text!)listA")

並檢索字符串

//Your code
let tabledata = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA")

可能存在類型不匹配,您存儲一種類型並檢索另一種類型。

在檢索使用arrayForKey()objectForKey()請參閱下面的代碼。

let tabledata = NSUserDefaults.standardUserDefaults().arrayForKey("\(identity.text!)listA") 

或者

let tabledata = NSUserDefaults.standardUserDefaults().objectForKey("\(identity.text!)listA")

如果它是一個數組,我會選擇第一個。

以下是您可以在NSKeyArchive幫助下存儲和檢索對象數組的NSKeyArchive

將數組存儲到 NSUserDefault。

let placesData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
UserDefaults.standard.set(placesData, forKey: "places")

從 NSUserDefault 檢索數組。

let placesData = UserDefaults.standard.object(forKey: "places") as? NSData

if let placesData = placesData {
    let placesArray = NSKeyedUnarchiver.unarchiveObject(with: placesData as Data) as? [Place]
    print(placesArray)
}

希望這對你有幫助。

將字符串數組保存和檢索到 UserDefaults

保存數組

let array = ["horse", "cow", "camel", "sheep", "goat"]

let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")

檢索數組

let defaults = UserDefaults.standard
let array = defaults.object(forKey: "SavedStringArray") as? [String] ?? [String]()

如何使用 NSUserDefaults 保存用戶設置中查看更多信息

你在數組中存儲什么?

如果它是對象,它將不起作用,如果它只是字符串或數字,那么它應該沒問題。

您接下來應該采取的步驟應該是打開異常斷點,可能還有 println() 一切可能,以便您可以查明問題的確切位置。

作為在黑暗中的一個鏡頭,我建議也許 (identity.text!) 出現為零

你也應該把它改成這個

if let tabledata: NSArray = NSUserDefaults.standardUserDefaults().stringForKey("\(identity.text!)listA"){

    myArray = [tabledata!]

    tableView.reloadData()
}

這將使代碼甚至不會嘗試運行,除非有它可以使用的值

最新的 swift3 版本將數據數組存儲到用戶默認值中並使用鍵獲取該數據數組

    let nameArray = ["Ramu","JAGAN","Steve","Swift"]
    let namesArrayData = NSKeyedArchiver.archivedData(withRootObject: nameArray)
    UserDefaults.standard.set(namesArrayData, forKey: "arrayData")

檢索數據

        let retriveArrayData= UserDefaults.standard.object(forKey:  "arrayData") as? NSData

   if let retriveArrayData= namesArrayData{
  let retriveArray = NSKeyedUnarchiver.unarchiveObject(with: namesArraydata as Data) as? [nameArray]
  print(retriveArray )
}

這已在 swift 3 中更改。請注意,這適用於設備,但不適用於操場或模擬器

//store the array
let array = ["horse", "cow", "camel", "sheep", "goat"]

let defaults = UserDefaults.standard

defaults.setValue(array, forKey: "history")

defaults.synchronize()

//Retrieve the array
if((UserDefaults.standard.array(forKey: "history")) != nil){
    let historyWords = (UserDefaults.standard.array(forKey: "history") as? [String])!
    print(historyWords)
}

存儲到用戶默認值:

let arrayFruit = ["Apple","Banana","Orange","Grapes","Watermelon"]    
 //store in user default
UserDefaults.standard.set(arrayFruit, forKey: "arrayFruit")

從用戶默認值中檢索數組:

if let arr = UserDefaults.standard.array(forKey: "arrayFruit") as? [String]{
    print(arr)
}

暫無
暫無

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

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