2010-09-27 5 views
12

est-il un moyen par lequel je peux modifier un type d'ID à l'objet NSString? Notez la ligne suivante de mon code.le type d'ID à NSString

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

dans ce appDelegate est l'objet de ma classe AppDelegate dans un programme de navigation et bird_arr est objet de NSMutableArray. Je veux utiliser la chaîne écrite dans la ligne sur laquelle on clique. Mais objectAtIndex: renvoie le type d'identifiant. Avons-nous un moyen de modifier ce type d'ID à NSString ou de toute autre manière par laquelle je peux collecter des chaînes à l'intérieur de la ligne spécifique?

Répondre

20

Eh oui, juste le jeter

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

Si vous voulez vérifier qu'il est vraiment un NSString utiliser

[someId isKindOfClass:[NSString class]] 
+5

Pas besoin de lancer - un 'id' est un objet générique, et peut donc être assigné à un pointeur de n'importe quel type. – mipadi

5

Un id pourrait être un pointeur tout objet, et il se promu à n'importe quel type de pointeur d'objet automatiquement (sorte de comme void * en C). Le code que vous montrez là semble correct. Il n'y a pas besoin d'un casting explicite, bien que vous puissiez en ajouter un si vous le voulez vraiment.

Si l'objet que vous sortez du tableau n'est pas, en fait, un NSString, vous devrez faire un autre travail pour obtenir l'objet que vous voulez.

0

en supposant que l'objet est une NSString, coulée à NSString * devrait fonctionner correctement:

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

« id de type » juste nous dit la valeur de retour est un objet - rien au-delà. Il pourrait déjà s'agir d'un objet NSString ou d'autre chose. Si tous les objets de ce tableau sont des chaînes, votre travail est terminé. Si c'est quelque chose d'autre, vous avez besoin d'un moyen de mettre cela en chaîne.

0

La coulée peut être effectuée sur un côté plus sûr, mais n'est pas nécessaire ici. J'ai essayé peu de choses avec le code après les deux lancer et sans lancer et les choses ont bien fonctionné. Id détient la référence et quel type de référence est quelque chose fait à l'exécution, je suppose. Cependant, j'ai trouvé un autre meilleur moyen d'obtenir du texte sur une ligne spécifique en format de chaîne. Je l'ai fait en utilisant cellForRowAtIndex: méthode d'index. cela me retournera la cellule à l'index spécifié, puis en utilisant la propriété textLabel. Merci pour votre réponse et aidez les gars.