2017-06-16 2 views
2
self.fetchMin(forStartDate: start, toEndDate: end) { (min, chal) in 

    guard let mins = min, let challenges = chal else { 
     return 
    } 

    let dict: [Int : [String]] = [mins:challenges] 

    UserDefaults.standard.set(dict, forKey: "WeekStates") 

} 

のint、arrayof [文字列]のペアを保存しようとしたときにエラーを取得こんにちは、上記のプログラムでは、私はuserDefaults内の文字列のキーと配列のペアを保存しようとしているが、私はそうするならば、それが突然クラッシュします。はuserDefaults

私は1つの値で試してみると、その動作します。

例えば:あなたが最後の点で述べたように、私はそれが動作[String]を試してみました

`let dict: [String] = challenges 
UserDefaults.standard.set(dict, forKey: "WeekStates") 
+0

いただきましクラッシュuは、libcの++ abi.dylib –

+0

に直面した:私はあなたのMAILIDにそれを送ることができるタイプのキャッチされない例外で終了NSException @ Anbu.Karthik – Gurunathan

+0

そのNSExceptionは、あなたが完全なクラッシュレポート –

答えて

1

https://developer.apple.com/documentation/foundation/userdefaults

UserDefaultsクラスは、フロート、ダブル、整数、ブール値、およびURLなど 一般的な種類にアクセスするための便利な方法を提供します。 デフォルトのオブジェクトは、プロパティリスト(つまり、 コレクションの場合、インスタンスの組み合わせ)のインスタンス(NSData、NSString、 NSNumber、NSDate、NSArray、NSDictionary)でなければなりません。 に他のタイプのオブジェクトを格納する場合は、通常、それを にアーカイブしてNSDataのインスタンスを作成する必要があります。詳細については、「環境設定」および「 設定プログラミングガイド」を参照してください。

このようなことができます。

let dict: [Int : [String]] = [1:["iOS Dev"]] 

    UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: dict as NSDictionary) as NSData, forKey: "4WeekStates") 

    if let unarchivedObject = UserDefaults.standard.object(forKey: "4WeekStates") as? Data { 

     let dic = NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? NSDictionary 
     print(dic!) 
    } 
0

[Int : [String]]のようなデータを保存できるかどうかわかりません。私の知る限りではUserDefaultsプロパティリストは特定の種類の変数のみを受け入れることができるため、その制限があります。あなたは、変数のこれらのタイプを保存することができます

  1. Array
  2. Data
  3. Date
  4. Dictionary
  5. NSNumber
  6. String
+0

私は辞書を保存しています。 – Gurunathan

+0

NSNumberまたはIntをキーとして辞書を保存することはできません –

関連する問題