初始化NSString时EXC_BAD_ACCESS

时间:2011-10-24 17:23:54

标签: objective-c cocoa nsstring exc-bad-access

我想用长度为1的字符初始化NSString,但是我收到错误。这是我的代码:

for(int i=0;i<[word length];i++)
    {

        letterMap = [self stringToAscii:[word substringWithRange:NSMakeRange(i, 1) ]];
        NSInteger codec = (letterMap + shifter) % 26;
        unichar ch = [self asciiToString:codec];

        NSString * codedLetter = [NSString stringWithCharacters:ch length:[ch length]];

    }

1 个答案:

答案 0 :(得分:4)

unichar不是ObjC对象,它是单个unicode字符的原始C类型(或typedef)。您需要调用NSString方法(可以在C类数组中使用多个字符),如下所示:

NSString * codedLetter = [NSString stringWithCharacters:&ch length:1];

(你的代码行中有两个问题:首先你要传递一个unichar的值作为第一个参数,而不是指向它的指针,第二个是你要尝试的在不是ObjC对象的东西上调用-length,甚至是指针。当它试图向某个随机存储器地址发送消息时,它会因后者而爆炸。)