2010-08-24 32 views
101

Estoy tratando de extraer una cadena (que contiene un entero) de una matriz y luego usarla como int en una función. Estoy tratando de convertirlo a un int usando intValue.ObjectiveC Parse Integer from String

Aquí está el código que he estado intentando.

NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 
    [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

me sale este error:

passing argument 3 of 'loggedIn:::' makes pointer from integer without a cast

¿Qué ocurre?

+2

Cómo loggedin ::: se declara? especialmente, ¿qué tipo de 3er parámetro espera? – Vladimir

+2

Por curiosidad, ¿de qué idioma vienes? He visto a un montón de gente haciendo preguntas de Objective-C en SO donde han hecho llamadas a métodos que se parecen a su método 'loggedIn :::', que es una forma decididamente no objetiva de hacer las cosas. – kubi

+0

@kubi: es Obj-C, método con argumentos sin nombres. – beefon

Respuesta

241

Realmente no sé qué era tan difícil acerca de esta cuestión, pero me las arreglé para hacerlo de esta manera:

[myStringContainingInt intValue];

Cabe señalar que también se puede hacer:

myStringContainingInt.intValue;

+2

Solo para nosotros noobs que provienen de otros idiomas, '[myStringContainingInt intValue];' también se puede escribir como 'myStringContainingInt.intValue;' – ToddBFisher

+5

¿Qué sucede cuando el número dentro de 'myStringContainingInt' es demasiado grande para caber dentro de 32 bits-- en realidad 31 bits desde que se firmó? –

+0

Debe usar longValue en este caso – dulgan

0

Básicamente, el tercer parámetro en loggedIn no debe ser un número entero, debe ser un objeto de algún tipo, pero no podemos estar seguros porque no se nombraron los parámetros en la llamada al método. Proporcione la firma del método para que podamos verlo con certeza. Tal vez se necesita un NSNumber o algo así.

+1

No necesariamente se supone que es un objeto. Pudo haber declarado erróneamente que el método tomaba un 'int *' - de hecho, eso parece bastante probable para mí, ya que mucha gente que escribe Objective-C sin aprender los conceptos básicos de C supone que los tipos de parámetros solo incluyen estrellas como parte de su sintaxis – Chuck

+0

Sí, no había pensado en eso. Esa es una buena posibilidad. –

+0

Toma int *. s esto es incorrecto? –

1
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 

_returnedArguments es una matriz de NSStrings que los bienes UITextField text está esperando. No es necesario convertir

error

Sintaxis:

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

Si su _appDelegate tiene una propiedad passwordField, entonces se puede establecer el texto mediante el siguiente

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]]; 
+0

Creo que ha sido radicalmente rechazado por el extraño nombre del método y la invocación torpemente escrita. La propiedad no está "esperando una cadena" (lo que sea que eso signifique) - 'contraseñaField.text' es el segundo argumento para el método' loggedIn ::: 'y' [[_returnedArguments objectAtIndex: 2] intValue] 'es el tercer argumento. Nada se está pasando a una propiedad. – Chuck

+0

declaro que el nombre del método es un error. Inferir lo que el código está intentando hacer ... – falconcreek

-1

Si he entendido bien, es necesario para convertir su NSString a int? Pruebe esta paz de código:

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2]; 
int number; 
sscanf([stringWithNumberInside UTF8String], "%x", &flags); 
+4

NSString tiene un método 'intValue'. http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue – Chuck

+0

Perdón, tiene razón. – beefon

7

simplemente puede convertir la cadena como esa [str intValue] o [str IntegerValue]

integerValue Devuelve el valor NSInteger del texto del receptor.

  • (NSInteger) IntegerValue Valor devuelto El valor NSInteger del texto del receptor, suponiendo una representación decimal y saltar espacios en blanco al principio de la cadena. Devuelve 0 si el receptor no comienza con una representación de texto decimal válida de un número.

para obtener más información, consulte here

+3

¿Responde esto después de toneladas de respuestas para la misma cosa ya están aquí? –

+5

¿Estás bromeando? ¿Qué pasa si la cadena es "0"? ¿Es un error o un análisis correcto? Es un poco triste que Apple aborrezca las excepciones, ya que este es exactamente el lugar donde las necesitas. – phreakhead

Cuestiones relacionadas