it-swarm.com.ru

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

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

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

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

13
Nitesh

да, просто брось

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

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

[someId isKindOfClass:[NSString class]]
22
cobbal

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

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

5
Carl Norum

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

1
Chuck

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

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

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

0
Nitesh