2010-04-18 10 views
0

J'ai regardé d'autres réponses et les docs. Peut-être qu'il me manque quelque chose, ou peut-être que j'ai un autre problème. J'essaie d'enregistrer un numéro en quittant l'application, puis lorsque l'application est chargée, je veux vérifier si cette valeur existe et prendre des mesures en conséquence. Voilà ce que j'ai essayé:NSUserDefaults: numéro enregistré Toujours 0, iPhone

Pour enregistrer à la sortie:

- (void)applicationWillTerminate: (UIApplication *) application 
{ 
double save = [label.text doubleValue]; // This could be the issue 

//double save = 3.5; // This works, it saves the value and loads it fine, so that is not the problem here. 

[[NSUserDefaults standardUserDefaults] setDouble: save forKey: @"savedNumber"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
} 

Pour vérifier:

- (IBAction)buttonclickSkip{ 

double save = [[NSUserDefaults standardUserDefaults] doubleForKey: @"savedNumber"]; 

if (save == 0) { 

    [self performSelector:@selector(displayAlert) withObject:nil]; 

    test.enabled = YES; 
    test.alpha = 1.0; 

    skip.enabled = NO; 
    skip.alpha = 0.0; 

    } 

else { 

label.text = [NSString stringWithFormat:@"%.1f %%", save]; 
} 

} 

Le problème est que je reçois toujours mon message d'alerte affiché, la valeur enregistrée est pas mis dans l'étiquette si en quelque sorte == 0 est toujours vrai. Pourquoi:

double save = [label.text doubleValue]; 

Toujours zéro? Avant de fermer l'application, le nombre dans cette étiquette est d'environ 0,5% (cela varie). Si cela fait une différence, je l'ai testé sur le simulateur iPhone.

Un grand merci,

Stu

+0

Définissez un point d'arrêt dans 'applicationWillTerminate:'. Quelle est la valeur de 'label'? Est-ce que c'est «nul»? Et comme le demande Pheelicks, quelle est la valeur de 'save'? –

+0

Le point d'arrêt n'est pas atteint. applicationWillTerminate est dans mon apploadViewController.m ... est-ce correct? – Stumf

+0

Jlehr m'a battu à ma prochaine question (et pourquoi je demandais plus d'informations d'abord) –

Répondre

1

Le fait que vous puissiez coder en dur la valeur et la récupérer signifie que le problème tourne définitivement autour de votre interaction avec le label.text et non votre utilisation de NSUserDefaults.

Assurez-vous que l'étiquette n'a pas déjà été détruite au moment où vous allez récupérer sa valeur. Lorsque l'application se termine, il est possible que vous ayez déjà désactivé la vue à partir de laquelle vous récupérez la valeur.

Une autre chose à essayer serait d'obtenir le texte lui-même au lieu de demander au système d'exploitation de convertir la valeur du texte en un nombre en premier. Si vous imprimez cela, vous pouvez avoir une idée de ce qui se passe.

+0

Votre théorie selon laquelle l'étiquette avait déjà été détruite semble avoir été correcte. Travaille maintenant. Merci à tous ceux qui ont aidé! – Stumf

0

Je dirais que le texte de votre étiquette n'est pas une double valeur valide. A partir de la documentation Apple pour NSString -doubleValue:

Renvoie 0.0 si le récepteur ne commence par une représentation de texte valide d'un nombre à virgule flottante.

Assurez-vous de lui transmettre quelque chose comme @ "13.2". La meilleure façon de vérifier cela est de coller un appel NSLog juste après avoir créé la sauvegarde de variable.

+0

Hmm c'est ma ligne mettant une valeur dans l'étiquette en premier lieu: label.text = [NSString stringWithFormat: @ "%. 1f %%", nombre]; L'étiquette réelle contient donc des nombres comme "12,7%" – Stumf

+0

J'ai changé l'étiquette à 3,5 sans symbole de pourcentage, montre toujours l'alerte. – Stumf

1

Assurez-vous que votre implémentation applicationWillTerminate: se trouve dans la classe de délégué de votre application.

+0

J'ai ajouté quelques nouvelles informations à la question.applicationWillTerminate étant frappé maintenant. – Stumf