2017-01-24 6 views
0

Ceci est la ligne de code en question:Pourquoi cette conversion de NSString en NSNumber renvoie-t-elle une valeur non valide de -1?

bks.quantity = [NSNumber numberWithInteger: [[arrayOfSplitStrings[i] objectAtIndex:[[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]] intValue]-1]; 

sd.dictionaryOfUserIndexes objectForKey: @ "29" contient une chaîne (représentant une quantité) qui doit être converti en NSNumber. Lorsque l'instruction est exécutée avec une quantité de chaîne valide (0-10), elle renvoie toujours -1, lorsqu'elle est supposée renvoyer le NSNumber pour la valeur.

Qu'est-ce que je fais mal?

+1

Pourriez-vous le faire morceau par morceau au lieu de le faire en une seule ligne puis vérifiez chaque valeur:' NSInteger userIndex = [[sd.dictionaryOfUserIndexes objectForKe y: @ "29"] intValue]; NSInteger n = [[arrayOfSplitStrings [i] objetAtIndex: userIndex] intValue]; 'Puis' bks.quantity = [NSnumber nombreWithInteger: n-1]; '? – Larme

+0

Une modification mineure à votre code: NSInteger userIndex = [[sd.dictionaryOfUserIndexes objectForKey: @ "29"] intValue]; NSInteger n = [[arrayOfSplitStrings [i] objetAtIndex: userIndex-1] intValue]; bks.quantity = [NSnumber numberWithInteger: n]; } Veuillez réécrire votre commentaire comme réponse afin que je puisse vous donner des points et fermer la question. Merci beaucoup ... Je n'aurais jamais pensé à le faire de cette façon ... SD – SpokaneDude

Répondre

1

Ce n'est pas une réponse "simple" (puisque la solution est juste idiote), c'est plutôt une suggestion sur les méthodes de travail, c'est pourquoi je poste une réponse.

Il n'est pas toujours bon de placer différentes lignes sur une seule ligne. Surtout quand vous rencontrez un problème dans votre cas. Il est préférable de diviser chaque commande, une par une, et de déboguer, vérifiez la valeur de chacune d'elles.

Dans votre cas:

bks.quantity = [NSNumber numberWithInteger: [[arrayOfSplitStrings[i] objectAtIndex:[[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]] intValue]-1]; 

==>

NSInteger userOfIndexes = [[sd.dictionaryOfUserIndexes objectForKey: @"29"] intValue]; 
NSLog(@"userOfIndexes: %d", userOfIndexes); 
NSInteger n = [arrayOfSplitStrings[i] objectAtIndex:userOfIndexes] intValue]; 
NSLog(@"n: %d", n); 
bks.quantity = [NSNumberWithInteger:n-1]; 

j'ajouté NSLog(), mais les valeurs pourraient être vérifier avec des points d'arrêt et débogueur. Je pourrais avoir aussi ajouter un contrôle sur arrayOfSplitStrings avec

NSArray *splitStrings = arrayOfSplitString[i]; 
NSLog(@"splitStrings: %@", splitStrings); 

et remplacer n avec:

NSInteger n = [splitStrings objectAtIndex:userOfIndexes] intValue]; 

De cette façon, vous auriez vérifier que apparemment (selon votre commentaire), votre question a été devaient .? mettre le » -1

NSInteger n = [[arrayOfSplitStrings[i] objectAtIndex: userIndex-1] intValue];