将charAtIndex分配给stringWithCharacters会产生无效的强制转换警告和错误的访问错误

时间:2015-10-15 05:16:24

标签: ios objective-c nsmutablestring

我试图从名字+姓氏中获取名字和姓氏。

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接受一个const unichar。

这会导致从较小的整数类型警告转换,并且遇到此行时应用程序崩溃(错误访问)。

为什么在Objective C中字符串操作如此复杂?

2 个答案:

答案 0 :(得分:1)

您可以使用componentsSeparatedByString:方法轻松获得名字和上次使用。

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

注意:您需要进行正确的数组边界检查。您也可以将NSScanner用于相同目的。

答案 1 :(得分:0)

试试这个:

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);