2010-09-27 8 views
12

¿hay alguna manera en que pueda cambiar un tipo de identificación al objeto NSString? tenga en cuenta la siguiente línea de mi código.tipo de identificación a NSString

NSString *value = [appDelegate.bird_arr objectAtIndex:rowClicked] ; 

en este AppDelegate es objeto de mi clase AppDelegate en un programa basado en la navegación y bird_arr es objeto de NSMutableArray. Quiero usar la cadena escrita en la fila en la que se hace clic. Pero objectAtIndex: devuelve el tipo de id. ¿Tenemos alguna manera de cambiar este tipo de identificación a NSString o de cualquier otra manera mediante la cual pueda recopilar una cadena dentro de la fila específica?

Respuesta

20

sí, simplemente echó

NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked]; 

Si desea volver a comprobar que en realidad es un NSString utilizar

[someId isKindOfClass:[NSString class]] 
+5

No hay necesidad de transmitir - un 'id' es un objeto genérico, por lo que puede asignarse a un puntero de cualquier tipo. – mipadi

5

Un id podría ser un puntero cualquier objeto, y va a promovido a cualquier tipo de puntero a objeto automáticamente (algo así como void * en C). El código que muestra allí parece correcto. No es necesario un lanzamiento explícito, aunque podrías agregar uno si realmente quieres.

Si el objeto que está saliendo de la matriz no es, de hecho, un NSString, tendrá que hacer otro trabajo para obtener el objeto que desea.

0

suponiendo que el objeto es un NSString, echando a NSString * debería funcionar bien:

NSString* value = (NSString*)[appDelegate.bird_arr objectAtIndex:rowClicked]; 
1

"id tipo" solo nos dice el valor de retorno es un objeto - nada más allá de eso. Ya podría ser un objeto NSString, o podría ser algo más. Si todos los objetos de esta matriz son cadenas, su trabajo está hecho. Si son otra cosa, necesitas alguna forma de poner esa otra cosa en una cadena.

0

se puede hacer la fundición para estar en un lado más seguro, pero no es necesario aquí. Probé algunas cosas con el código después de lanzar y sin lanzar, y las cosas funcionaron bien. Id contiene la referencia y qué tipo de referencia es algo hecho en tiempo de ejecución, supongo. Sin embargo, encontré otra forma mejor de obtener texto en una fila específica en formato de cadena. Lo hice usando cellForRowAtIndex: método de índice. esto me devolverá la celda en el índice especificado y luego usará la propiedad textLabel. Gracias por su respuesta y ayuda Chicos.