5

Es gibt einige errors in Echtzeit-Szenarien auf meiner iOS Anwendung. Ich kann diesen speziellen Fehler unter Core Foundation, der mehrere Benutzer in meiner Anwendung betrifft, nicht verstehen. Der Fluss bricht keine meiner Projektdateien ein und ich bin nicht sicher, was diesen Absturz verursacht.Unbekannter Selektor gesendet an Instanz _UIAlertControllerAlertPresentationController

Anbringen der Crashlytics-Protokolle. Jeder Rat oder jede Hilfe wäre eine große Hilfe, danke.

Corefoundation _CF_forwarding_prep_0

Fatal Exception: NSInvalidArgumentException - [_ UIAlertControllerAlertPresentationController adaptivePresentationController]: unerkannten Selektor Instanz gesendet 0x133e29870

Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     0x18ff391b8 __exceptionPreprocess 
1 libobjc.A.dylib    0x18e97055c objc_exception_throw 
2 CoreFoundation     0x18ff40268 __methodDescriptionForSelector 
3 CoreFoundation     0x18ff3d270 ___forwarding___ 
4 CoreFoundation     0x18fe3680c _CF_forwarding_prep_0 
5 UIKit       0x19689708c -[UISearchController _searchPresentationController] 
6 UIKit       0x19648f8cc -[_UISearchControllerTransplantSearchBarAnimator animateTransition:] 
7 UIKit       0x19613d464 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke 
8 UIKit       0x19607ffdc _runAfterCACommitDeferredBlocks 
9 UIKit       0x196071d50 _cleanUpAfterCAFlushAndRunDeferredBlocks 
10 UIKit       0x195de10b4 _afterCACommitHandler 
11 CoreFoundation     0x18fee60c0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
12 CoreFoundation     0x18fee3cf0 __CFRunLoopDoObservers 
13 CoreFoundation     0x18fee4180 __CFRunLoopRun 
14 CoreFoundation     0x18fe122b8 CFRunLoopRunSpecific 
15 GraphicsServices    0x1918c6198 GSEventRunModal 
16 UIKit       0x195e597fc -[UIApplication _run] 
17 UIKit       0x195e54534 UIApplicationMain 
18 Levo       0x1000c1c30 main (AppDelegate.swift:22) 
19 libdispatch.dylib    0x18edf55b8 (Missing) 
func showErrorView(errorType: ErrorType, retryClickDelegate: ErrorViewRetryClickDelegate?) { 
    var message = "" 
    switch errorType { 
    case .INTERNET: 
     message = "Your internet connection does not seem to be working. Kindly ensure that you are connected to the internet and try again" 
     break 
    case .INVALID_DATA: 
     message = "Something went wrong. Please try again!" 
     break 
    case .JSON_PARSING: 
     message = "Something went wrong. Please try again!" 
     break 
    case .UNAUTHORIZED: 
     self.showInformativeAlert("Logged Out", message: "Looks like you have been logged out. Please login in again!", completion: nil) 
     self.switchStoryboard(Storyboard.SIGNIN) 
     return 
    default: 
     message = "Something went wrong. Please try again!" 
    } 

    let errorAlert = UIAlertController(title: "Error", message: message, preferredStyle: .Alert) 
    if let retryClickDelegate = retryClickDelegate { 
     errorAlert.addAction(UIAlertAction(title: "Try again", style: UIAlertActionStyle.Default, handler: { (action) in 
      retryClickDelegate.onErrorRetryClicked(errorType) 
      errorAlert.dismissViewControllerAnimated(true, completion: nil) 
     })) 
    } 
    errorAlert.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default, handler: nil)) 

    if (isTopViewController) { 
     self.presentViewController(errorAlert, animated: true, completion: nil) 
    } 
} 

func showInformativeAlert(title: String?, message: String?,completion : (() -> Void)?) { 
    let informativeAlert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    informativeAlert.addAction(UIAlertAction(title: "Got it!", style: UIAlertActionStyle.Default, handler: { (action) in 
     informativeAlert.dismissViewControllerAnimated(true, completion: nil) 
     completion?() 
    })) 
    self.presentViewController(informativeAlert, animated: true, completion: nil) 
} 

public var isTopViewController: Bool { 
    if self.navigationController != nil { 
     return self.navigationController?.visibleViewController === self 
    } else if self.tabBarController != nil { 
     return self.tabBarController?.selectedViewController == self && self.presentedViewController == nil 
    } else { 
     return self.presentedViewController == nil && self.isVisible 
    } 
} 
+0

können Sie Ihren versuchten Code zeigen –

+0

Mögliches Duplikat von http://StackOverflow.com/Questions/36834755/Cancelling-Search-with-UisearchController-Causes-crash – Sulthan

+0

@Anbu.Karthik - Ich bin mir nicht sicher, wo der Absturz passiert, habe den Beitrag mit evtl. ausprobiertem Code bearbeitet. Ich habe diese ErrorViews zu meiner UIViewController-Erweiterung hinzugefügt. – Muthu

Antwort

0

Ich denke, das Problem besteht darin, dass Sie die Completion-Handler nicht korrekt verwenden, also gleichzeitig eine Warnung erscheint und verschwindet. Zum Beispiel statt:

informativeAlert.dismissViewControllerAnimated(true, completion: nil) 
    completion?() 

sollten Sie verwenden

informativeAlert.dismissViewControllerAnimated(true, completion: completion) 

Auch kann die Implementierung von isTopViewController leicht fehlschlagen, wenn eine View-Controller-Animation wird ausgeführt.

Zum Beispiel, wenn Sie showErrorView zweimal aufrufen, isTopViewController wird wahrscheinlich true für beide Anrufe sein und zwei Warnungen werden sofort erscheinen, Absturz Ihrer App.

Verwandte Themen