在将某些内容保存到核心数据后,我想显示一个警告,感谢用户。当用户单击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];
}
答案 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];
}