我正在使用此函数接受字符串输入,将其转换为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仍然存在于这样一个简单的程序中!这有什么问题?
答案 0 :(得分:1)
EXEC_BAD_ACCESS
通常在内存泄漏时触发,检查tf是否为null或已释放。
您可以在方法的开头写NSLog(@"%@", tf);
来检查。
答案 1 :(得分:1)
作为edo42,它可能与null / release字符串有关。有关该错误消息的大量信息以及如何EXC_BAD_ACCESS signal received,请参阅“debug using NSZombieEnabled”。
答案 2 :(得分:1)
答案 3 :(得分:1)
打印整数时应该使用“%d”。将行更改为:
NSLog(@"Hello, %d", d);