在开关语句中达到默认值后,EXC 错误访问



我有这个简单的开关语句:

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 中调用该特定方法。

最新更新