2012-12-19 2 views
2

Lorsque sauver NSDecimalNumber à EditViewController, en valeur DisplayTableViewController apparaissent NaNNSDecimalNumber apparaissent NaN

S'il vous plaît ont besoin de conseils pour résoudre ce problème. Merci

Mon code:

- (IBAction)saveChanges:(id)sender { 
    editGift.nameOfGift = nameTextField.text; 
    editGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; 

    AppDelegate *myApp = (AppDelegate *) [[UIApplication sharedApplication]delegate]; 
    [myApp saveContext]; 
    [self.delegate editGiftViewControllerDidSave:self]; 
} 

Please watch video explanation

Valeur d'entrée:

currencyFormatter = [[NSNumberFormatter alloc]init]; 

[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString:priceTextField.text]; 
+0

Quelle est la valeur d'entrée, c'est-à-dire qu'est-ce que 'priceTextField.text'? –

+0

valeur d'entrée: currencyFormatter = [[NSNumberFormatter alloc] init]; [currencyFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; personGift.priceOfGift = [NSDecimalNumber decimalNumberWithString: priceTextField.text]; – Astakhoff

+0

La valeur d'entrée n'est pas formatée sur le NSDecimalNumber donnant ainsi NaN. vérifiez l'entrée! Consignez la valeur du champ de texte avant de le mettre dans le NSDecimalNumber et postez-le;) –

Répondre

3

Votre code ne sait pas quand il applique la mise en forme de monnaie, mais compte tenu de votre vidéo, il est très probable que la valeur du champ de texte est "6000 $". Ce n'est pas un nombre (donc "NaN").

+1

Je crois que ce que Rob ici dit est ce qui cause votre problème. Comme vous obtenez la valeur du texte qui comprend le signe '$'. Supprimez votre $ -sign de 'priceTextField.text' lorsque l'utilisateur clique sur Enregistrer. Juste comme une tête. Vous pouvez également vérifier les numéros invalides. comme '1.2.3.4..00' – Christer

+0

Merci beaucoup Rob et Christer, Comment puis-je supprimer $ -sign de textfield? – Astakhoff

+1

Vous avez déjà un formateur de numéro de monnaie à portée de main. Utilisez numberFromString: pour convertir le texte en 'NSNumber'. Idéalement, vous devriez utiliser 'setGeneratesDecimalNumbers:' pour que vous obteniez un nombre décimal. Il y avait un bug qui empêchait cela de fonctionner aussi facilement que vous le souhaitiez, mais j'espère que maintenant c'est corrigé (ça fait des années). Voir http://stackoverflow.com/questions/317311/obtaining-an-nsdecimalnumber-from-a-locale-specific-string –

2

NSDecimalNumber documentation dit:

En plus des chiffres, NumericString peut inclure une première « + » ou « - »; un seul "E" ou "e", pour indiquer l'exposant d'un nombre en notation scientifique; et un seul NSDecimalSeparator pour diviser le fractionnaire de la partie intégrale du nombre.

Vous devez vérifier que la chaîne en priceTextField.text ne contient que des caractères valides - et pour valide. Une chose à vérifier en particulier est de savoir si vous avez un point décimal ou une virgule décimale, selon les paramètres régionaux de l'utilisateur. Par conséquent, vous pouvez envisager d'utiliser:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString 
locale:(NSDictionary *)locale 
+0

Merci beaucoup JOM !!! – Astakhoff

Questions connexes