2017-08-12 19 views
0

UserDefaultsを使用して値を設定に保存しています。Nil UserDefaultsを設定するとNSInvalidArgumentExceptionが発生する

私はテンプレートクラスと(上書きするために必要な)値を取得する方法を持っている

func getValue(_ value: T?) -> Any? 
{ 
    return value 
} 

ときi'am呼び出し:valuenil、 Iすることができ

UserDefaults.standard.set(getValue(value), forKey: "pref_key") 

このエラーが発生する:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object null for key pref_key'

Wa値がnilの場合はキーを削除しないといけないのですか?

+0

getValueメソッドから 'nil'または' NSNull'を返していますか? – rmaddy

+0

nilですが、いくつかの値はNSNullである可能性があります。両方をサポートするはずですか? – 4bottiglie

+1

いいえ、あなたは 'NSNull'をUserDefaultsに保存することはできません。 – rmaddy

答えて

1

NSNullの値をUserDefaultsに格納しようとすると問題が発生します。これはサポートされていません。 nilは問題ありません。単に既存の値を削除します。しかし、NSNullnilと同じではありません。

これに対処する必要があります。

var val = getValue(value) 
if val is NSNull { 
    val = nil 
} 
UserDefaults.standard.set(val, forKey: "pref_key") 
+0

私はそれを直接設定すると動作していますが、メソッドをスローしません。私もそれを印刷し、無しです、私はそれは言語の制限だと思う、多分何らかの方法でそれを変更しています – 4bottiglie

+0

私は "値" == nilをテストしている、またはNSNullですが、 "if"それを出力すると、出力はnilになります。私はその動作を理解できません – 4bottiglie

+0

私は値が文字列にラップされていることがわかりましたか? ifがnilであってもif条件は失敗します。何か案が? – 4bottiglie

関連する問題