MOC 后台保存后的 UIAlertView 有效 iOS 7 而不是 iOS 8
UIAlertView after MOC background save works iOS 7 not iOS 8
我有一个父详细视图控制器,它为子详细视图提供通用的自定义功能。
父项包含两个自定义函数。
一个函数触发后台保存到两个 NSManagedObjectContext
,立即保存主 MOC 以释放 UI,然后保存私有 MOC。 iOS 8.
之前相当标准的设置
下面的函数呈现一个UIAlertView
来确认保存成功。这包括在设定的时间(大约半秒)后自动关闭的代码。
一切正常 运行 iOS 7,无论是在设备上还是在模拟器上。
当 运行 iOS 8 时,这会导致设备和模拟器崩溃。
五个子详细信息视图中只有一个存在问题。在详细并排比较之后,我确认它们每个都有相同的代码块和方法。
我在两个自定义函数中插入了断点。保存工作正常,但代码在尝试呈现 UIAlertView
后崩溃,仅在 运行 iOS 时提到 8. 调试器进入我不理解的机器代码。尝试的保存不会持续存在。
如果我注释掉警报视图,保存仍然存在,但显然我不再有用户的警报视图。
有什么建议吗?
更新
我想我可能找到了解决方案……某种程度上……还不确定……
UIAlertController
和这篇文章 NSHipster
在我的父详细视图控制器中增加 UIAlertView 代码解决了这个问题。
在我的 message
方法中,我现在检查 iOS 是否响应 UIAlertController
class,如果它确实实例化 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];
}
我有一个父详细视图控制器,它为子详细视图提供通用的自定义功能。
父项包含两个自定义函数。
一个函数触发后台保存到两个 NSManagedObjectContext
,立即保存主 MOC 以释放 UI,然后保存私有 MOC。 iOS 8.
下面的函数呈现一个UIAlertView
来确认保存成功。这包括在设定的时间(大约半秒)后自动关闭的代码。
一切正常 运行 iOS 7,无论是在设备上还是在模拟器上。
当 运行 iOS 8 时,这会导致设备和模拟器崩溃。
五个子详细信息视图中只有一个存在问题。在详细并排比较之后,我确认它们每个都有相同的代码块和方法。
我在两个自定义函数中插入了断点。保存工作正常,但代码在尝试呈现 UIAlertView
后崩溃,仅在 运行 iOS 时提到 8. 调试器进入我不理解的机器代码。尝试的保存不会持续存在。
如果我注释掉警报视图,保存仍然存在,但显然我不再有用户的警报视图。
有什么建议吗?
更新
我想我可能找到了解决方案……某种程度上……还不确定……
UIAlertController
和这篇文章 NSHipster
在我的父详细视图控制器中增加 UIAlertView 代码解决了这个问题。
在我的 message
方法中,我现在检查 iOS 是否响应 UIAlertController
class,如果它确实实例化 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];
}