Bien que la solution puisse être une «solution de rechange», je ne pense pas qu'elle réponde à la question sous-jacente. En fournissant un dictionnaire avec des valeurs [NSNull null], il fournit à NSUserDefaults un dictionnaire valide. Pourquoi est-ce qu'il plante? Est-ce quelque chose qu'il fait "mal" ou est-ce un bug dans registerDefaults?
Il peut y avoir des circonstances où il est important de savoir si un utilisateur a entré une valeur (ie une chaîne valide) ou non une valeur (null) et la méthode de création d'une "chaîne valide mais vide" ne peut pas déterminer si la chaîne vide était parce que l'utilisateur a créé une chaîne sans caractères ou s'il n'a jamais créé de chaîne du tout. Vous pouvez vouloir une logique différente dans ces deux cas. Je suis dans le même bateau, j'ai une valeur NSUserDefault que je veux être [NSNull null] et tout ce que j'ai lu suggère la "bonne" façon de mettre une valeur nulle dans un dictionnaire est avec [NSNull null ] et mon dictionnaire crée bien. Mais registerDefaults avec ce dictionnaire valide provoque un plantage. Cela suggère un bug dans l'implémentation de registerDefaults n'est-ce pas? Quel est le problème avec ce qui suit et pourquoi il plante?
NSArray *defaultValues = [NSArray arrayWithObjects:[NSNull null], nil];
NSArray *CurrentKeys = [NSArray arrayWithObjects: @"NullKey", nil];
NSDictionary *resourceDict = [NSDictionary dictionaryWithObjects:defaultValues forKeys:CurrentKeys];
[[NSUserDefaults standardUserDefaults] registerDefaults:resourceDict];
En fin de compte, je pense que la réponse est que les userDefaults sont écrits comme un plist et plists ne prennent pas en charge NSNull. Si tel est le cas, la documentation de registerDefaults doit indiquer que seuls les types d'objets plist sont autorisés dans le dictionnaire.
Vous avez besoin de plus de détails, comment définissez-vous myDict? – Jordan
Merci, heere est mon dictionnaire def: NSDictionary * myDict = [dictionnaireDDDictionnaireWithObjectsAndKeys: tempDSArray, kSecKey, tempMPArray, kChapKey, nil]; \t \t [[NSUserDefaults standardUserDefaults] registerDefaults: monDict]; [[NSUserDefaults standardUserDefaults] synchronize]; – Roby