Estou tentando extrair uma seqüência de caracteres (que contém um número inteiro) de uma matriz e, em seguida, usá-lo como int em uma função. Estou tentando convertê-lo para um int usando intValue.
Aqui está o código que estou tentando.
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];
Eu recebo este erro:
passando o argumento 3 de 'logIn :::' faz o ponteiro do número inteiro sem uma conversão
O que há de errado?
iphone
objective-c
string
int
Christian Stewart
fonte
fonte
(int)
parteloggedIn:::
método, que é uma maneira decididamente não-objetiva-C de fazer as coisas.loggedIn:::
. O restante dessa declaração são apenas nomes de parâmetros, não parte do seletor. Linguisticamente, deveria ser- (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId
. E então você chamaria isso de[_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];
.Respostas:
Realmente não sei o que havia de tão difícil nessa questão, mas consegui fazê-lo desta maneira:
[myStringContainingInt intValue];
Note-se que você também pode fazer:
myStringContainingInt.intValue;
fonte
[myStringContainingInt intValue];
também pode ser escrito comomyStringContainingInt.intValue;
myStringContainingInt
é muito grande para caber em 32 bits - na verdade 31 bits desde que foi assinado?-[NSString intValue]
pode não se comportar exatamente como espera. Dos documentos : essa propriedade é 0 se a sequência não começar com uma representação válida de texto decimal de um número. Por exemplo,[@" 2 asdghjk" intValue]
retornará2
.Você pode simplesmente converter a string assim [str intValue] ou [str integerValue]
integerValue Retorna o valor NSInteger do texto do destinatário.
para mais informações consulte aqui
fonte
_returnedArguments
é uma matriz daNSStrings
qual aUITextField text
propriedade está esperando. Não há necessidade de converter.Erro de sintaxe:
Se o seu _appDelegate tiver uma
passwordField
propriedade, você poderá definir o texto usando o seguintefonte
passwordField.text
é o segundo argumento para ologgedIn:::
método e[[_returnedArguments objectAtIndex:2] intValue]
é o terceiro argumento. Nada está sendo passado para uma propriedade.Basicamente, o terceiro parâmetro in
loggedIn
não deve ser um número inteiro, deve ser um objeto de algum tipo, mas não podemos ter certeza porque você não nomeou os parâmetros na chamada do método. Forneça a assinatura do método para que possamos ver com certeza. Talvez seja preciso umNSNumber
ou algo assim.fonte
int*
- de fato, isso me parece bastante provável, já que muitas pessoas que escrevem o Objective-C sem aprender o básico de C assumem que os tipos de parâmetros incluem apenas estrelas como parte de sua sintaxe.Lembre-se de que os usuários internacionais podem estar usando um separador decimal diferente daquele
.
em que os valores podem se confundir ou tornar-se nulos ao usarintValue
em uma string.Por exemplo, no Reino Unido
1.23
está escrito1,23
, de modo que o número1.777
seria de entrada pelo usuário como1,777
, o que, como.intValue
, será1777
não1
(truncado).Eu fiz uma macro que converterá o texto de entrada em um NSNumber com base em um argumento de localidade que pode ser nulo (se nulo, ele usa a localidade atual do dispositivo).
fonte
Se eu entendi corretamente, você precisa converter o seu
NSString
emint
? Experimente esta paz de código:fonte
intValue
método. developer.apple.com/iphone/library/documentation/cocoa/…