Integer Casting при работе со строками в Какао - PullRequest
1 голос
/ 17 ноября 2009

У меня есть, как я надеюсь, довольно простая проблема. Я очень просто пытаюсь преобразовать символ в его строчную версию. Вот мой код:

- (IBAction)click:(id)sender { 
    [outputLabel setText:[inputField text]];
    NSString* textFieldString = [inputField text];
    NSLog(@"String is %@", textFieldString);
    int textFieldLength = textFieldString.length;
    UniChar* currChar = [textFieldString characterAtIndex:0];
    NSLog(@"First char is %c", currChar);
    NSLog(@"Length is %i", textFieldLength);
    //currChar = [currChar lowercaseString];
    //NSLog(@"Lowercase char is %c", currChar);
}

Это дает мне следующую ошибку:

Инициализация делает указатель из целое число без приведения в строке:
NSString* currChar = [textFieldString characterAtIndex:0];

Однако, просматривая документацию, он говорит, что метод characterAtIndex: возвращает символ, а не целое число. Что дает?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

characterAtIndex возвращает unichar, что является unsigned short. Строка должна быть

unichar currChar = [textFieldString characterATtIndex:0];

Кроме того, вы можете просто использовать lowercaseString, чтобы получить нижний регистр всего NSString:

NSString *lowercase = [textFieldString lowercaseString];
2 голосов
/ 17 ноября 2009

Это определение для этой функции:

- (unichar)characterAtIndex:(NSUInteger)index

Unichar - это тип данных c, а не строка NSString *. Вам нужно сделать

unichar currChar = [textFieldString characterAtIndex:0];

Сообщение, которое вы получаете, связано с тем, что оно пытается преобразовать целочисленное значение unichar в значение указателя.

EDIT:

Кстати, если вам действительно нужна строка NSString, проще всего было бы (сухой код):

NSString *currChar = [textFieldString substringWithRange:NSMakeRange(0,1)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...