我的应用程序有一个按钮,用于检查输入的值是否正确。 有时它会导致它崩溃,但奇怪的是它会以不规则的间隔发生(有时在第三次迭代,有时是第十次,有时从不)。
我在调试器中收到EXC_BAD_ACCESS错误。因此,似乎某些东西正在被释放,而它不应该被释放。按钮调用此功能:
- (IBAction)checkValue:(id)sender{
int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];
actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
message:@"next value."
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
[correctAlert show];
[correctAlert release];
}
else
{
UIAlertView *incorrectAlert = [[UIAlertView alloc]
initWithTitle:@"does not match"
message:@"next value."
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
[incorrectAlert show];
[incorrectAlert release];
}
使用僵尸指向第一个声明:
int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];
有谁知道问题可能是什么?
答案 0 :(得分:0)
将其更改为
NSInteger actualDifference = [firstNumberString intValue] - [secondNumberString intValue]; //change int to NSInteger
NSString *actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
message:@"next value."
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
[correctAlert show];
[correctAlert release];
}
else
{
UIAlertView *incorrectAlert = [[UIAlertView alloc]
initWithTitle:@"does not match"
message:@"next value."
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles: nil];
[incorrectAlert show];
[incorrectAlert release];
}
你得到这个代码。它对我有用......
答案 1 :(得分:0)
如果在第一行检测到僵尸,则表示程序的其他部分正在发布firstNumberString
或secondNumberString
。这就是问题开始的地方,但只有在您稍后尝试访问这些值时才会显示。你还在哪里使用这些字符串?你有没有释放它们?
为了整体安全,可能应该为它们分配属性,而不是成员变量。