2

Ok, j'essaie d'écrire une fonction de score élevé pour mon application.Objectif C - Problème avec objectForKey

Mon problème est que quand aucun score élevé n'a encore été enregistré, mon programme se bloque.

Si je l'enregistre avec:

[[NSUserDefaults standardUserDefaults] setObject:@"[given string]" forKey:@"firstName"]; 

d'abord, il fonctionne très bien. Cependant, si je commence le programme pour la première fois et essayer de voir les scores élevés avec le code suivant:

first = [[NSString alloc] initWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"]]; 

mauvaises choses se produisent.

Fondamentalement, est-il absent pour voir s'il n'existe encore rien sous firstName? Y at-il un moyen d'initialiser sans effacer tout nom qui pourrait être déjà présent?

Merci.

Répondre

1

Vous pouvez charger "d'abord" comme ceci:

first = [[[NSUserDefaults standardUserDefaults] objectForKey:@"firstName"] retain]; 
if (!first) { 
    // set default or do something else if there wasn't a value saved 
    first = @"N/A"; 
} 
3

La documentation NSString pour initWithString: dit

Paramètres

aString

La chaîne à partir de laquelle copier des caractères. Cette valeur ne doit pas être nulle.

La documentation objectForKey: dit

Valeur de retour

L'objet associé à la clé spécifiée ou nulle si la clé était introuvable.

Le problème semble être qu'il ya un nul retourné lorsque vous essayez de récupérer prenom qui n'existe pas encore et essayer de créer un NSString avec comme entrée.

+0

+1 Belle analyse. – gerry3

2

La méthode d'instance NSUserDefaults registerDefaults: est conçue exactement dans ce but: Vous pouvez définir des valeurs par défaut pour vos préférences qui seront remplacées par toute autre valeur définie pour la même clé de préférence. Assurez-vous de l'appeler assez tôt pour qu'il s'exécute avant tout code qui doit accéder à vos préférences.