我有一个父详细信息视图控制器,它为子详细信息视图提供了常见的自定义功能。
父母包括两个自定义函数。
一个函数触发后台保存到两个NSManagedObjectContext
,立即保存主MOC以释放UI,然后保存私有MOC。 iOS 8之前的标准设置。
以下函数显示UIAlertView
以确认保存成功。这包括在一段时间(大约半秒)后自动解散的代码。
这一切都可以正常运行iOS 7,无论是在设备上还是在模拟器上。
这会在设备和模拟器上运行iOS 8时导致崩溃。
五个子详细信息视图中只有一个存在问题。经过详细的并排比较后,我确认每个都有相同的代码块和方法。
我在两个自定义函数中插入了断点。保存工作正常,但代码在尝试呈现UIAlertView
后崩溃,正如运行iOS 8时所提到的那样。调试器会进入我不理解的机器代码。尝试的保存不会持续存在。
如果我注释掉警报视图,则保存仍然存在,但显然我不再拥有该用户的警报视图。
有什么建议吗?
更新
想想我可能已经找到了一种解决方案......各种......还不确定......
UIAlertController
以及NSHipster
答案 0 :(得分:0)
在我的父详细信息视图控制器中扩充UIAlertView代码可以解决问题。
在我的message
方法中,我现在检查iOS是否响应UIAlertController
类,是否确实实例化UIAlertController
,否则实例化UIAlertView
。
- (void)message {
...other code...
if ([UIAlertController class]) { //checking whether iOS responds to the UIAlertController class
UIAlertController *alert = [UIAlertController alertControllerWithTitle:titleComplete
message:messageComplete
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion: ^(void){
[self performSelector:(@selector(dismissAlertController:)) withObject:alert afterDelay:durationMessageCompleteSave];
}];
// [self dismissViewControllerAnimated:YES completion:nil];
// display time on screen too short using just the dismissViewController above,
// so add into completion handler in call to presentViewController...
} else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:titleComplete
message:messageComplete
delegate:self
cancelButtonTitle:nil//self.localisedAlertButtonRemain
otherButtonTitles:nil];//buttonOther, nil];
[alertView setTag:010];
[alertView show];
[self performSelector:(@selector(dismissAlertView:)) withObject:alertView afterDelay:durationMessageCompleteSave];
}
}
...
- (void)dismissAlertView:(UIAlertView *)alert {
[alert dismissWithClickedButtonIndex:0 animated:NO];
}
- (void)dismissAlertController:(UIAlertController *)alert {
[alert dismissViewControllerAnimated:YES completion:nil];
}