2016-06-27 6 views
0

Ich habe ein Problem, einen Delegierten zu einem PopoverPresentationController Zuweisung mit Swift 2.2 in Xcode 7.3Nil Fehler Delegate Zuordnung PopoverPresentationController

Grund einen Delegierten der Verwendung wird Ich versuche, eine Funktion auszulösen, wenn außerhalb eines Popover Ansicht drücken (Klasse RedeemViewController), um zum Hauptmenü zurückzukehren (Klasse MenuViewController). Dies geschieht ohne einen Knopf. Die Funktion existiert in MenuViewController, aber es ist nicht relevant, was es jetzt tut, also habe ich gerade den Delegierungsteil eingefügt, wo der Fehler auftritt.

class MenuViewController: UIViewController, UIPopoverPresentationControllerDelegate { 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if (sender as! UIButton == btnRedeem) { 
      let rvc = segue.destinationViewController as! RedeemViewController 
      let nav = UINavigationController(rootViewController: rvc) 
      let popover = nav.popoverPresentationController 
      popover!.delegate = self 
    } 

} 
} 

Drücken der Taste btnRedeem, zum Segue zu der Ansicht Popover verbunden, RedeemViewController, führt zu

fatale Fehler: unerwartet gefunden nil, während ein optionaler Wert

In Xcode Abwickeln, die Debugger zeigt auf

popover!.delegate = self 

die Segue existiert und wird in der Storyboard genannt. Wenn Sie mit der rechten Maustaste auf die Ansicht klicken, werden keine Warnungen oder veralteten Referenzen angezeigt.

den Code Ersetzen Sie dabei mit

popover?.delegate = self 

führt zu einem allgemeinen Fehler in dem der Debugger in AppDelegate stoppt:

libC++ abi.dylib: mit abgefangene Ausnahme vom Typ endet NSException

Ich schaute here, aber keine der möglichen Ursachen trifft zu. Ich habe eine generische AppDelegate.swift wie beschrieben here.

Jede Hilfe wird geschätzt! Ich habe meistens Beispiele mit Buttons gefunden, möchte aber keinen Button verwenden, um das Popover zu verlassen, da es nicht benötigt wird.

Weitere Informationen über die Delegation: die Funktion, die ich auf dem Hintergrund brauchen läuft

popoverPresentationControllerDidDismissPopover (popoverPresentationController: UIPopoverPresentationController)

zu überprüfen, wenn die Popover Ansicht (RedeemViewController) verlassen wird und die Funktion I Ich möchte darin auslösen, dass eine neue Schaltfläche angezeigt wird.

Vielen Dank für das Lesen und vielleicht können Sie mir helfen!

Cheers,

Floris

Antwort

0
let nav = UINavigationController(rootViewController: roc) 

Hier finden Sie einen brandneuen Navigationscontroller mit dem Root-VC als Ziel Controllers segue erstellen. Das wird nicht funktionieren - der Ziel-Controller wird mit dem gewünschten Container eingerichtet, Sie erstellen keine neuen View-Controller in prepareForSegue.

Sie am popoverPresentationController von rvc aussehen wollen, nicht von einigen Navigationssteuerung, die auf dem Bildschirm gehen wird, ist nicht hinzugefügt:

if (sender as! UIButton == btnRedeem) { 
     let rvc = segue.destinationViewController as! RedeemViewController 
     let popover = rvc.popoverPresentationController 
     popover!.delegate = self 

}

+0

Danke für die Hilfe jrturton aber immer noch ich *** "fataler Fehler: unerwartet gefunden Null beim Auspacken eines optionalen Wertes" *** zeigt auf 'popover! .delegate = self' –

+0

Wenn das der Fall ist dann gibt es keine Popover-Präsentation Controller. Wird dieser Ansichts-Controller tatsächlich in einem Popover angezeigt, wenn Sie auf diese Schaltfläche klicken? Arbeiten Sie an der richtigen Überleitung? – jrturton

+0

Der RedeemViewController erscheint tatsächlich und es ist der richtige Übergang. In der if-Anweisung funktioniert es auch, wenn ich feststelle, welches Segment statt welcher Schaltfläche, also nicht auf das Segment verweist, das Problem ist. Wie in: 'if (segue.identifier ==" segueToRedeemPopover ") {// tu stuff}' Das Seque ist benannt und hat Popover als Typ. Der RedeemViewController ist nur ein gewöhnlicher UIViewController 'Klasse RedeemViewController: UIViewController, UITextFieldDelegate { }' –

Verwandte Themen