Obj-C - NSString to int

时间:2011-05-12 11:22:31

标签: objective-c

我正在使用此函数接受字符串输入,将其转换为int,并找到二进制等效项。它在一个小时前工作,但在我尝试使用不同的键盘,然后返回后,它不再有效:

 - (void)convertToBinary:(NSString *)tf
    {
      NSString *result = @"";
      NSLog(@"-- %@", tf); //successfully prints
      [tf retain];
      if ([tf isKindOfClass:[NSString class]]){
        NSLog(@"tf is NSString"); //THIS PRINTS SO TF IS CONFIRMED TO BE NSSTRING
       }
      int dec = [tf intValue]; //BREAKS HERE...!

      if (!dec){
        [binaryOutput setText:@"Sorry, invalid input!"];
        } else {
              ...
        }

}

我知道要将NSString转换为int,我只需要执行int dec = [someString intValue]但这不起作用。我得到的错误是EXEC_BAD_ACCESS

请帮忙吗?

修改

我刚做了一个小命令行项目:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    NSString *t = @"123";
    int d = [t intValue];
    NSLog(@"Hello, %@", d);
    [pool drain];
    return 0;
}

并且EXEC_BAD_ACCESS仍然存在于这样一个简单的程序中!这有什么问题?

4 个答案:

答案 0 :(得分:1)

EXEC_BAD_ACCESS通常在内存泄漏时触发,检查tf是否为null或已释放。 您可以在方法的开头写NSLog(@"%@", tf);来检查。

答案 1 :(得分:1)

作为edo42,它可能与null / release字符串有关。有关该错误消息的大量信息以及如何EXC_BAD_ACCESS signal received,请参阅“debug using NSZombieEnabled”。

答案 2 :(得分:1)

使用Zombies仪器的Instruments.app可能有助于发现崩溃。还可以尝试“构建和分析”运行。

答案 3 :(得分:1)

打印整数时应该使用“%d”。将行更改为:

NSLog(@"Hello, %d", d);