辞書にキーと値を追加しようとしているときに、この辞書を追加してユーザーがデフォルトし、辞書オブジェクトに読み戻そうとしています。ユーザーのデフォルトで辞書の内容がすぐに保存されない3
1)辞書がユーザーのデフォルトから空になっているのはなぜですか?2つの質問があります。辞書にキーと値を追加したので、辞書に保存してはいけません。ユーザーのデフォルトから検索しますか?私はこのコードために何ができるか
let defaults = UserDefaults.standard;
var myDict = [String: String]()
myDict["key"] = "value"
defaults.setValue(myDict, forKey: "myDict")
let mydict2 = defaults.object(forKey: "myDict") as? [String: String] ?? [String:String]()
print(mydict2)
2)辞書店であれば辞書は、このようなものだったので、もし私が値またはキーとして作成したカスタムクラス:どのように私ができる
class Car {
var engineSize: Int
var color: String
init() {
engineSize = 2000
color = "blue"
}
}
class Boat {
var surfaceArea: Int
var weight: Int
init() {
surfaceArea = 3500
weight = 4000
}
}
var myDict = [Car: Boat]()
をその2番目のdictをユーザーのデフォルト値に保存し、そこから読み込みます。
ありがとう
EDIT:
これはebby94によって提案された答えです:
var myDict = [String:String]()
myDict["key"] = "value";
let data = NSKeyedArchiver.archivedData(withRootObject: myDict)
UserDefaults.standard.set(data, forKey: "myDict")
func foo()
{
guard let archivedData = UserDefaults.standard.value(forKey: "myDict") as? Data
else
{
print("failed1")
return
}
guard var unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: archivedData) as? [String:String]
else
{
print("failed2")
return
}
print(unarchivedDictionary["key"]!)
}
foo()
しかし、これは私が正しくデータがアーカイブされていなかったと仮定しています、failed1を印刷します。私はそれを遊び場で走っているからでしょうか?
まず、実際のプロジェクトでテストしてみてください(遊び場は動作しません) –
次に、クラスをNSCodingに準拠させる必要があります。 –
3回目の使用KeyedArchieverでオブジェクトをデータに変換する –