J'essaie d'extraire une chaîne (qui contient un entier) d'un tableau, puis de l'utiliser comme int dans une fonction. J'essaye de le convertir en int en utilisant intValue.
Voici le code que j'ai essayé.
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];
J'obtiens cette erreur:
passer l'argument 3 de 'LogIn :::' crée un pointeur à partir d'un entier sans conversion
Qu'est-ce qui ne va pas?
iphone
objective-c
string
int
Christian Stewart
la source
la source
(int)
pièceloggedIn:::
méthode, ce qui est une manière résolument non-Objective-C de faire les choses.loggedIn:::
. Le reste de cette déclaration n'est que des noms de paramètres et ne fait pas partie du sélecteur. Idiomatiquement, ça devrait l'être- (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId
. Et puis vous l'appeleriez comme[_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];
.Réponses:
Je ne sais vraiment pas ce qui était si difficile dans cette question, mais j'ai réussi à le faire de cette façon:
[myStringContainingInt intValue];
Il est à noter que vous pouvez également faire:
myStringContainingInt.intValue;
la source
[myStringContainingInt intValue];
peuvent également être écrits commemyStringContainingInt.intValue;
myStringContainingInt
est trop grand pour tenir dans 32 bits - en fait 31 bits depuis qu'il est signé?-[NSString intValue]
ne vous comporterez peut-être pas exactement comme vous le souhaitez. À partir de la documentation : Cette propriété est 0 si la chaîne ne commence pas par une représentation textuelle décimale valide d'un nombre. Par exemple,[@" 2 asdghjk" intValue]
retournera2
.Vous pouvez simplement convertir la chaîne comme ça [str intValue] ou [str integerValue]
integerValue Renvoie la valeur NSInteger du texte du destinataire.
pour plus d'informations, reportez-vous ici
la source
_returnedArguments
est un tableauNSStrings
dont laUITextField text
propriété attend. Pas besoin de convertir.Erreur de syntaxe:
Si votre _appDelegate a une
passwordField
propriété, vous pouvez définir le texte à l'aide de la commande suivantela source
passwordField.text
est le deuxième argument de laloggedIn:::
méthode et[[_returnedArguments objectAtIndex:2] intValue]
est le troisième argument. Rien n'est transmis à une propriété.Fondamentalement, le troisième paramètre de
loggedIn
ne doit pas être un entier, il doit s'agir d'un objet quelconque, mais nous ne pouvons pas le savoir avec certitude car vous n'avez pas nommé les paramètres dans l'appel de méthode. Fournissez la signature de la méthode afin que nous puissions voir avec certitude. Peut-être que cela prend unNSNumber
ou quelque chose.la source
int*
- en fait, cela me semble assez probable, car beaucoup de gens qui écrivent Objective-C sans apprendre les bases de C supposent que les types de paramètres incluent simplement les étoiles dans leur syntaxe.Gardez à l'esprit que les utilisateurs internationaux peuvent utiliser un séparateur décimal autre que
.
auquel cas les valeurs peuvent être mélangées ou simplement devenir nulles lors de l'utilisationintValue
sur une chaîne.Par exemple, au Royaume
1.23
- Uni est écrit1,23
, de sorte que le nombre1.777
serait entré par l'utilisateur comme1,777
, qui, comme.intValue
, ne sera1777
pas1
(tronqué).J'ai fait une macro qui convertira le texte d'entrée en NSNumber basé sur un argument de locale qui peut être nul (si nul, il utilise la locale actuelle du périphérique).
la source
Si je vous ai bien compris, vous devez convertir votre
NSString
enint
? Essayez cette paix de code:la source
intValue
méthode. developer.apple.com/iphone/library/documentation/cocoa/…