1

我有这个简单的 switch 语句:

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;
}

每次 aa 值达到默认情况时,它会打印出“默认”并且由于 EXC BAD ACCESS 导致程序崩溃。这是什么原因造成的?谢谢!

4

2 回答 2

2

EXC_BAD_ACCESS 通常是由访问已经被释放的对象引起的。

检查此 switch 块之后的行中的对象,以确保它们的保留计数 > 0。我也会检查发件人。

于 2012-05-07T14:54:16.883 回答
0

您在块中设置值的 newItem 的范围是什么?

可能在调用解除块时它已经超出范围 - 请记住,您的警报视图已显示并等待您的输入,但代码继续执行并离开您的 switch 语句(和方法,基于您的解释)

您可以设置另一个创建 newItem 并设置它的值的方法,而不是直接在块中执行操作,然后从dismissBlock 中调用该特定方法。

于 2012-05-07T16:44:25.950 回答