配列を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()
しかし、私は得る
致命的エラー:オプション値のアンラップ中に
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")
_
配列の場合は、最初のものを使用します。
String配列をUserDefaultsに保存する方法を探しているときにこの質問に答えましたが、ここでは明確な答えが見つかりませんでした。ただし、 NSUserDefaultsを使用してユーザー設定を保存する方法 で答えを見つけました。詳細については、その記事をお読みください。
配列を保存
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]()
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)
}
これがお役に立てば幸いです。
アレイに何を保存していますか?
オブジェクトの場合は機能しません。文字列または数字の場合は問題ありません。
次のステップは、例外ブレークポイントをオンにして、おそらく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")
RetriveData
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)
}