Objective c 在switch语句中点击default后EXC访问错误

Objective c 在switch语句中点击default后EXC访问错误,objective-c,ios,cocoa-touch,exc-bad-access,Objective C,Ios,Cocoa Touch,Exc Bad Access,我有一个简单的switch语句: switch ([sender tag]) { case 0: [NVAlertView showNVAlertViewFromView:self.view title:@"STOCK NUMBER" description:@"XXXXXXXXXXX"

我有一个简单的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;
}
每次a值碰到默认情况时,它都会打印出“default”,并且程序会因为EXC错误访问而崩溃。这是什么原因造成的?
谢谢

EXC\u坏访问通常由访问已解除分配的对象引起


检查此开关块后的行中的对象,以确保它们的保留计数>0。我还要检查发送者。

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

在调用Disclose块时,它可能已超出范围-请记住,警报视图已显示并等待您的输入,但代码仍在执行,并保留switch语句(和方法,根据您的解释)


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

switch语句后面有代码吗?从描述中可以看出,问题似乎是在switch之后出现的。switch语句之后什么都没有。函数结束。Switch是唯一的语句。执行错误访问通常是过早释放/挂起指针。代码段范围内的任何内容都不应导致该错误,因此该错误可能是在该方法之前或之后引入的。开关的末尾可能是运行周期中的最后一段代码,这就是为什么您会在默认情况下看到错误,尽管这不是导致错误的原因。我启用了NSZombieEnabled,但也没有显示任何内容。我的格式有问题或某种奇怪的打字错误。只有第一种情况有效。导致崩溃的案例,我把它们作为我的switch语句中的第一个案例,它们工作…+1正确的想法。更一般地说,它是由使用无效指针引起的。您可以通过访问一个已解除分配的对象,或者使用一个从未初始化过的指针,或者通过读取/写入某个内存块的末尾来获取其中的一个。