Objective-C NSString for character with characterAtIndex

Nik*_*iko 8 xcode loops for-loop objective-c

我试图逐个字符地循环NSString,但我得到一个EXC_BAD_ACCESS错误.你知道如何做到这一点吗?我一直在谷歌搜索几个小时,但无法弄清楚.

这是我的代码(.m):

self.textLength = [self.text length];

for (int position=0; position < self.textLength; position++) {

    NSLog(@"%@", [self.text characterAtIndex:position]);

    if ([[self.text characterAtIndex:position] isEqualToString:@"."]){
        NSLog(@"it's a .");
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

tas*_*oor 30

字符不是对象.characterAtIndex返回unichar,实际上是一个整数类型unsigned short.你需要使用%C而不是%@in NSLog.字符也不是NSString,所以你不能发送它isEqualToString.您需要使用ch == '.'比较ch反对'.'.

unichar ch = [self.text characterAtIndex:position];
NSLog(@"%C", ch);

if (ch == '.') {} // single quotes around dot, not double quotes
Run Code Online (Sandbox Code Playgroud)

注意,'a'是字符,"a"是C字符串,@"a"是NSString.它们都是不同的类型.

当你使用%@unichar chNSLog,它试图从内存位置打印一个ch无效的对象.因此,您获得了EXC_BAD_ACCESS.