1. ホーム
  2. swift

[解決済み] NSUserdefaultsの配列の保存と読み込みはどのように行うのですか?

2023-04-27 15:54:56

質問

Swiftで辞書のようにオブジェクトを追加する配列を作りたいのですが、["key1": "value1", "key2": "value2"] という形式が必要でしょうか。

で保存しようとすると NSUserDefaults で保存しようとすると、すべて正しいのですが、読み込むときに NSUserDefaults をキーとして読み込むと、クラッシュします。私のvar objはどのようなタイプのデータを必要とするのでしょうか?

let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!

var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])

//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()

//read
var obj: [AnyObject!] = []
if(obj != nil){
    print("size: ")
    print(obj.count) //vary long value confused..
    element = obj[0]  //crash
    print(element.objectForKey("key1"))
}

どのように解決するのですか?

質問には「配列の配列」とありますが、おそらくほとんどの人は、配列の配列を UserDefaults . そのような人のために、私はいくつかの一般的な例を追加します。

文字列の配列

配列の保存

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

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

配列の取得

let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()

int配列

保存配列

let array = [15, 33, 36, 723, 77, 4]

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

配列の取得

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray")  as? [Int] ?? [Int]()

ブール配列

配列の保存

let array = [true, true, false, true, false]

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

配列の取得

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray")  as? [Bool] ?? [Bool]()

日付の配列

保存の配列

let array = [Date(), Date(), Date(), Date()]

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

配列の取得

let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray")  as? [Date] ?? [Date]()

オブジェクトの配列

カスタムオブジェクト(および結果的にオブジェクトの配列)を UserDefaults . その方法については、以下のリンクを参照してください。

注意事項

  • nil合体演算子( ?? ) を使うと、クラッシュすることなく、保存された配列や空の配列を返すことができます。つまり、オブジェクトがnilを返した場合、その次の値である ?? 演算子に続く値が代わりに使用されるということです。
  • ご覧の通り、基本的な設定は Int , Bool そして Date . また Double . 私の知る限り、プロパティリストに保存できるものであれば、このように動作します。