2014-10-30 67 views
3

Crashlytics給我這個錯誤在我的應用程序:試圖解僱UIAlertController的iOS 8

Fatal Exception: NSInternalInconsistencyException 
Trying to dismiss UIAlertController <UIAlertController: 0x14de40020> with unknown presenter. 

UIKit 
-[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:] + 584 

此問題僅出現在iOS 8的,但是當我試圖重現這個錯誤,我alertViews iOS中8和沒有正常工作壞事發生。爲什麼會出現這個問題?

我已經閱讀,在iOS 8 UIAlertView已被棄用,現在,我們不得不使用UIAlertController,但是當我嘗試使用UIAlertController我不能解僱警報和功能是不一樣的。

請幫幫我。

謝謝您的提前。

編輯:

我想改變的代碼是這樣的:

UIAlertView * alerta = [[UIAlertView alloc] initWithTitle: AMLocalizedString(@"alertUpdate", @"") 
                message:@"\n" 
               delegate:self 
             cancelButtonTitle:nil 
             otherButtonTitles:nil]; 

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
spinner.center = CGPointMake(139.5, 75.5); // .5 so it doesn't blur 
[alerta addSubview:spinner]; 
[spinner startAnimating]; 
[alerta show]; 


UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:dis bundle:nil]; 
MainVC *main = [storyBoard instantiateViewControllerWithIdentifier:@"MainVC"]; 
UINavigationController *navControl = [[UINavigationController alloc] initWithRootViewController: main]; 
[self presentModalViewController: navControl animated: YES]; 

[alerta dismissWithClickedButtonIndex:0 animated:YES]; 

回答

0

UIAlertController

使用這樣的代碼設置popoverPresentationController

UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"Title" 
                        message: nil 
                      preferredStyle: UIAlertControllerStyleActionSheet]; 
     [alertController addAction: [UIAlertAction actionWithTitle: @"title" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 

     }]]; 
CGRect rect = self.view.frame; 
rect.origin.x = self.view.frame.size.width/20; 
rect.origin.y = self.view.frame.size.height/20; 
[alertController.popoverPresentationController setPermittedArrowDirections:0]; 
alertController.popoverPresentationController.sourceView = self.view; 
alertController.popoverPresentationController.sourceRect = rect; 
[alertController setModalPresentationStyle:UIModalPresentationPopover]; 
[self presentViewController: alertController animated: YES completion: nil]; 
+0

需要添加一個動作? – amurcia 2014-10-30 11:37:18

+0

這對我不起作用。當警報顯示時,我更改了視圖控制器並返回到mainVC。當我推送你的代碼時,警報出現,但我無法推送de mainVC。 – amurcia 2014-10-30 11:41:09

1

不知道如果你能解決E本,但我也有類似的問題,這裏是一個潛在的解決方案:

落實UIAlertViewDelegate協議和覆蓋 alertView:didDismissWithButtonIndex:方法。

視圖控制器的任何呈現或解聘應該發生內此方法,以確保100%的,在我們在別處導航和「演講」變成未知的AlertView完全駁回。

您也可以在從UIActionSheet按鈕點擊導航時執行此操作。

3

替換此

[self presentModalViewController: navControl animated: YES]; 
[alerta dismissWithClickedButtonIndex:0 animated:YES]; 

有了這個

[alerta dismissWithClickedButtonIndex:0 animated:YES]; 
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
    [self presentModalViewController: navControl animated: YES]; 
}]; 

這就提出了一個新的控制器異步確保警報視圖被駁回

+1

Xcode告訴我,presentModalViewController在iOS 6.0中不推薦使用,但是使用不同的方法(我有我的項目的內部)替換塊中的行,它的工作。謝謝我已經投了答案。 :) – Gram 2015-07-02 22:28:42

+1

我知道棄用)。我剛剛編輯源代碼行以使問題的答案更合適 – Tim 2015-07-03 10:40:16