主运行中心后台保存后的UIAlertView在iOS 7而不是iOS 8下工作

主运行中心后台保存后的UIAlertView在iOS 7而不是iOS 8下工作,ios,uitableview,ios8,parent-child,uialertview,Ios,Uitableview,Ios8,Parent Child,Uialertview,我有一个父局部视图控制器,它为子局部视图提供公共自定义函数 父函数包括两个自定义函数 一个函数触发后台保存到两个NSManagedObjectContexts,立即保存主MOC以释放UI,然后保存私有MOC。iOS 8之前的标准设置 以下函数显示一个UIAlertView,以确认保存成功。这包括在设定的时间(大约半秒)后自动关闭的代码 无论是在设备上还是在模拟器上,在运行iOS7时,这一切都可以正常工作 在设备和模拟器上运行iOS 8时,这会导致崩溃 五个子详图视图中只有一个存在此问题。在进行详

我有一个父局部视图控制器,它为子局部视图提供公共自定义函数

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

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

以下函数显示一个
UIAlertView
,以确认保存成功。这包括在设定的时间(大约半秒)后自动关闭的代码

无论是在设备上还是在模拟器上,在运行iOS7时,这一切都可以正常工作

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

五个子详图视图中只有一个存在此问题。在进行详细的并排比较之后,我确认它们都有相同的代码块和方法

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

如果我注释掉alert视图,保存将持续,但显然我不再拥有该用户的alert视图

有什么建议吗

更新

我想我可能已经找到了解决办法。。。某种程度上。。。还不确定


UIAlertController
本文通过在我的父详细视图控制器中增加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];
}

没有代码就很难给出正确的答案。但听起来好像它没有显示在主线程上。就我个人而言,我不会对储蓄表现出警惕。它会有点唠叨不断弹出一条消息,即使用户知道如果他按下save,它就会保存。谢谢你的反馈。如果您理解问题的概念和背景,并且遇到过类似问题,则本例中的代码是不相关的。我可以插入代码,但相关代码非常广泛。UI作用于主线程。我使用在我的核心数据堆栈中创建的私有和主MOC。我在代码的其他地方没有使用多线程。如前所述,此问题仅适用于五个几乎相同的子视图控制器中的一个,它们都在主线程上运行。专用MOC在主线程以外的其他线程中运行。如果视图控制器显示警报视图,但控制器在代理为控制器的警报视图之前释放,则也可能发生崩溃。感谢您的评论,但这些评论对我来说没有意义。当我写“不要在其他地方使用多线程”时,这些话意味着我承认私有MOC在主线程以外的线程上,并且在我的代码的任何部分中,多线程没有在其他任何地方使用。感谢您的建议,但就其性质而言,警报视图会劫持屏幕,当用户点击“后退”按钮释放“我的视图”及其控制器时,在警报视图之前释放该视图在数字上是不可能的。