Назначение charAtIndex для stringWithCharacters дает предупреждение о недопустимом приведении и ошибку неправильного доступа

Я пытаюсь получить имя и фамилию из имени + фамилия.

int loop=0;
NSMutableString *firstname = [[NSMutableString alloc]init];
 NSMutableString *fullName = [[NSMutableString alloc]initWithString:@"Anahita+Havewala"];

for (loop = 0; ([fullName characterAtIndex:loop]!='+'); loop++) {
    [firstname appendString:[NSString stringWithCharacters:(const unichar *)[fullName characterAtIndex:loop] length:1]];
}
NSLog(@"%@",firstname);

Я пробовал приведение типов из unichar в const unichar*, потому что characterAtIndex возвращает unichar, а stringWithCharacters принимает константный unichar.

Это приводит к предупреждению о преобразовании из меньшего целочисленного типа и сбою приложения (плохой доступ) при обнаружении этой строки.

Почему строковые операции в Objective C такие сложные?


person SeeObjective    schedule 15.10.2015    source источник


Ответы (2)


Попробуйте это:

NSMutableString *firstname = [[NSMutableString alloc] init];
    NSMutableString *fullName = [[NSMutableString alloc] initWithString:@"Anahita+Havewala"];

for (NSUInteger loop = 0; ([fullName characterAtIndex:loop]!='+'); loop++) {
    unichar myChar = [fullName characterAtIndex:loop];
    [firstname appendString:[NSString stringWithFormat:@"%C", myChar]];
}

NSLog(@"%@", firstname);
person Abhinav    schedule 15.10.2015
comment
Всегда рада помочь! Рад, что вам помогло :)! - person Abhinav; 15.10.2015
comment
Не уверен, почему я получил отрицательный голос здесь. Пожалуйста, напишите причину отрицательного голосования! - person Abhinav; 15.10.2015

Вы можете легко получить имя и фамилию, используя componentsSeparatedByString: метод.

NSMutableString *fullName = [[NSMutableString alloc]initWithString:@"Anahita+Havewala"];
NSArray *components = [fullName componentsSeparatedByString:@"+"];
NSString *firstName = components[0];
NSString *lastName  = components[1];

Примечание. Вам необходимо правильно проверить границы массива. Также вы можете использовать NSScanner для того же цель.

person Midhun MP    schedule 15.10.2015
comment
Как мне проверить границы массива? Я не знаю, сколько символов будет до «+» или после. И если мне нужно это выяснить, мне придется использовать characterAtIndex. - person SeeObjective; 15.10.2015