ios / xcode:UIAlert不停止操作并单击OK崩溃的应用程序

时间:2015-08-31 19:08:46

标签: ios objective-c uialertview dismiss

在将某些内容保存到核心数据后,我想显示一个警告,感谢用户。当用户单击OK时,我想关闭执行保存的模态视图控制器。

但是,警报并未停止解除控制器,并且当您点击确定时,警报会导致应用程序崩溃。我的理解是,当控制器不再存在时,可能会发生这些崩溃。但是,在这种情况下,我在解除控制器之前启动警报。

有人能发现出了什么问题吗?

感谢任何建议。

代码:

if ([self.managedObjectContext save:&error]) {
            [self fireAlert];
            // Dismiss View Controller
            [self dismissViewControllerAnimated:YES completion:nil];

        } else {
            if (error) {
                NSLog(@"Unable to save record.");
                NSLog(@"%@, %@", error, error.localizedDescription);
            }
         }

-(void) fireAlert {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self
                                               cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alert show];
}

1 个答案:

答案 0 :(得分:1)

您正在解雇视图控制器,因此delegate:self导致崩溃,因为

之后
[self dismissViewControllerAnimated:YES completion:nil];

self已不再可用。它被解除分配并向解除分配的对象发送消息导致崩溃。

如果您不想使用delegate:nil委托方法,请尝试制作UIAlertView

或使用委托方法,请确保您拥有UIViewController <UIAlertViewDelegate>

然后做

if ([self.managedObjectContext save:&error]) {
            [self fireAlert];

        } else {
            if (error) {
                NSLog(@"Unable to save record.");
                NSLog(@"%@, %@", error, error.localizedDescription);
            }
         }

-(void) fireAlert {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self
                                               cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alert show];
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{
   // Dismiss View Controller
   [self dismissViewControllerAnimated:YES completion:nil];
}