我有这个简单的开关语句:
switch ([sender tag]) {
case 0:
[NVAlertView showNVAlertViewFromView:self.view
title:@"STOCK NUMBER"
description:@"XXXXXXXXXXX"
cancelTitle:@"Cancel"
otherTitle:@"DONE"
dismissBlock:^(BOOL canceled, NSString *description) {
if (!canceled) {
[newItem setObject:description forKey:@"stocknum"];
}
}];
NSLog(@"YOP!");
break;
case kDescription:
[NVAlertView showNVAlertViewFromView:self.view
title:@"DESCRIPTION"
description:@"Enter a description here."
cancelTitle:@"Cancel"
otherTitle:@"DONE"
dismissBlock:^(BOOL canceled, NSString *description) {
if (!canceled) {
[newItem setObject:description forKey:@"description"];
}
}];
break;
case kBrandName:
[NVAlertView showNVAlertViewFromView:self.view
title:@"BRAND NAME"
description:@"Enter a brand name here."
cancelTitle:@"Cancel"
otherTitle:@"DONE"
dismissBlock:^(BOOL canceled, NSString *description) {
if (!canceled) {
[newItem setObject:description forKey:@"description"];
}
}];
break;
case kPrice:
[NVAlertView showNVAlertViewFromView:self.view
title:@"PRICE"
description:@"$199.99"
cancelTitle:@"Cancel"
otherTitle:@"DONE"
dismissBlock:^(BOOL canceled, NSString *description) {
if (!canceled) {
[newItem setObject:description forKey:@"description"];
}
}];
break;
default:
NSLog(@"default");
break;
}
每当一个值达到默认大小写时,它就会打印出"default",并且由于EXC错误访问而导致程序崩溃。这是什么原因造成的?谢谢!
EXC_BAD_ACCESS通常是由访问已解除分配的对象引起的。
检查此开关块后面的行中的对象,确保它们的保留计数> 0。 我也会检查发件人。
你在块中设置值的 newItem 的范围是什么?
调用消除块时,它可能已超出范围 - 请记住,警报视图已显示并等待输入,但代码会继续执行并保留 switch 语句(和方法,基于您的解释)
您可以设置另一个创建 newItem 并设置其值的方法,而不是直接在块中执行操作,并从 dismissBlock 中调用该特定方法。