Ответ 1
yep, просто бросьте его
NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked];
Если вы хотите дважды проверить, что это действительно используется NSString
[someId isKindOfClass:[NSString class]]
есть ли способ, с помощью которого я могу изменить тип id на объект NSString? обратите внимание на следующую строку моего кода.
NSString *value = [appDelegate.bird_arr objectAtIndex:rowClicked] ;
в этом appDelegate является объектом моего класса AppDelegate в навигационной программе, а bird_arr - объект NSMutableArray. Я хочу использовать строку, написанную в строке, которая нажата. Но objectAtIndex: возвращает тип id. У нас есть какой-либо способ изменить этот тип id на NSString или любым другим способом, с помощью которого я могу собирать строку внутри определенной строки?
yep, просто бросьте его
NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked];
Если вы хотите дважды проверить, что это действительно используется NSString
[someId isKindOfClass:[NSString class]]
An id
может быть указателем на любой объект, и он автоматически будет присвоен любому типу указателя объекта (например, void *
в C). Код, который вы показываете, выглядит правильно. Нет необходимости в явном приведении, хотя вы можете добавить его, если хотите.
Если объект, который вы выбрали из массива, на самом деле не является NSString
, вам нужно будет выполнить другую работу, чтобы получить нужный объект.
"id
type" просто говорит нам, что возвращаемое значение является объектом - ничего кроме этого. Это уже может быть объект NSString, иначе это может быть что-то другое. Если все объекты в этом массиве являются строками, ваша работа выполняется. Если они что-то еще, вам нужно каким-то образом получить что-то еще в строке.
Предполагая, что объект является NSString, приведение в NSString * должно работать нормально:
NSString* value = (NSString*)[appDelegate.bird_arr objectAtIndex:rowClicked];
литье может быть сделано для более безопасной стороны, но здесь не требуется. Я пробовал несколько вещей с кодом после кастинга и без кастинга, и все отлично работало. Идентификатор содержит ссылку и какой тип ссылки что-то делается во время выполнения, я полагаю. Однако я нашел еще один лучший способ получить текст в определенной строке в строчном формате. Я сделал это, используя метод cellForRowAtIndex: index. это вернет мне ячейку по указанному индексу, а затем с помощью свойства textLabel. Thanx для вашего ответа и помочь ребятам.