MOC背景保存后的UIAlertView适用于iOS 7而非iOS 8

时间:2015-03-04 20:36:14

标签: ios uitableview ios8 parent-child uialertview

我有一个父详细信息视图控制器,它为子详细信息视图提供了常见的自定义功能。

父母包括两个自定义函数。

一个函数触发后台保存到两个NSManagedObjectContext,立即保存主MOC以释放UI,然后保存私有MOC。 iOS 8之前的标准设置。

以下函数显示UIAlertView以确认保存成功。这包括在一段时间(大约半秒)后自动解散的代码。

这一切都可以正常运行iOS 7,无论是在设备上还是在模拟器上。

这会在设备和模拟器上运行iOS 8时导致崩溃。

五个子详细信息视图中只有一个存在问题。经过详细的并排比较后,我确认每个都有相同的代码块和方法。

我在两个自定义函数中插入了断点。保存工作正常,但代码在尝试呈现UIAlertView后崩溃,正如运行iOS 8时所提到的那样。调试器会进入我不理解的机器代码。尝试的保存不会持续存在。

如果我注释掉警报视图,则保存仍然存在,但显然我不再拥有该用户的警报视图。

有什么建议吗?

更新

想想我可能已经找到了一种解决方案......各种......还不确定......

UIAlertController以及NSHipster

撰写的这篇文章

1 个答案:

答案 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];
}