2017-06-16 1 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") 

} 

Salut, Dans le programme ci-dessus, je suis en train de stocker paire de clés et tableau de chaînes en userDefaults mais si je le fais, il se bloque de façon inattendue.Obtention de l'erreur tout en essayant de stocker Int, arrayof [string] paire dans userDefaults

Si j'essaie avec une valeur, son fonctionnement.

par exemple:

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

ce qui est le krach u face –

+0

libC++ abi.dylib: mettre fin à l'exception du type uncaught NSException @ Anbu.Karthik – Gurunathan

+0

son du NSException peut vous montrer le rapport complet de l'accident –

Répondre

1

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

La classe UserDefaults fournit des méthodes pratiques pour accéder à types communs tels que flotteurs, doubles, entiers, booléens et URL. Un objet par défaut doit être une liste de propriétés, c'est-à-dire une instance de (ou pour collections, une combinaison d'instances de): NSData, NSString, NSNumber, NSDate, NSArray ou NSDictionary. Si vous voulez stocker tout autre type d'objet, vous devez généralement l'archiver à pour créer une instance de NSData. Pour plus de détails, voir Préférences et Guide de programmation des paramètres.

Vous pouvez faire quelque chose comme ceci.

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

Comme vous l'avez mentionné au dernier point j'ai essayé [String] cela fonctionne. Je ne suis pas sûr si vous pouvez stocker des données comme le type de [Int : [String]], À ma connaissance UserDefaults Les listes de propriétés peuvent uniquement accepter certains types de variables, il a donc cette limitation. Vous pouvez stocker ces types de variables:

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

Je le sauvegarde a un dictionnaire seulement. – Gurunathan

+0

vous ne pouvez pas stocker le dictionnaire avec un NSNumber ou Int comme clé –