тип идентификатора в NSString - PullRequest
       10

тип идентификатора в NSString

14 голосов
/ 27 сентября 2010

Есть ли способ, которым я могу изменить тип идентификатора на объект NSString? обратите внимание на следующую строку моего кода.

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

в этом appDelegate является объектом моего класса AppDelegate в навигационной программе, а bird_arr является объектом NSMutableArray. Я хочу использовать строку, написанную в строке, по которой щелкают. Но objectAtIndex: возвращает тип идентификатора. Есть ли у нас какой-либо способ изменить этот тип идентификатора на NSString или каким-либо другим способом, которым я могу собирать строки внутри определенной строки?

Ответы [ 5 ]

22 голосов
/ 27 сентября 2010

Да, просто разыграйте его

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

Если вы хотите дважды проверить, что это действительно использование NSString

[someId isKindOfClass:[NSString class]]
5 голосов
/ 27 сентября 2010

id может быть указателем на любой объект, и он будет автоматически переведен на любой тип указателя объекта (вроде void * в C). Код, который вы там показываете, выглядит правильно. В явном приведении нет необходимости, хотя вы можете добавить его, если действительно хотите.

Если объект, который вы выводите из массива, на самом деле не является NSString, вам придется выполнить какую-то другую работу, чтобы получить нужный объект.

1 голос
/ 27 сентября 2010

"id тип" просто говорит нам, что возвращаемое значение является объектом - ничего кроме этого.Это может быть уже объект NSString или что-то еще.Если все объекты в этом массиве являются строками, ваша работа завершена.Если это что-то другое, вам нужен какой-то способ вставить это что-то еще в строку.

0 голосов
/ 29 сентября 2010

литье может быть сделано, чтобы быть на более безопасной стороне, но здесь это не нужно. Я пробовал несколько вещей с кодом после кастинга и без кастинга, и все работало нормально. Идентификатор содержит ссылку, и какой тип ссылки что-то делается во время выполнения, я полагаю. Однако я нашел другой лучший способ получить текст в определенной строке в формате строки. Я сделал это с помощью метода cellForRowAtIndex: index. это вернет мне ячейку по указанному индексу, затем используя свойство textLabel. Спасибо за ваш ответ и помощь, ребята.

0 голосов
/ 27 сентября 2010

при условии, что объект является строкой NSString, приведение к NSString * должно работать нормально:

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