2016-04-13 3 views
0

Hier ist ein Problem, das ich hatte und ich konnte nirgendwo etwas finden, um mein Problem zu lösen, im Grunde, was ich habe, ist ein create event scenario, und ich habe einen UISwitch, der in meinem CreateEventViewController einschalten soll, und einen View-Controller für diese Einstellung, das ist mein SetCountdownViewController, was es tut, aber ich möchte eine Schaltfläche zum Abbrechen in SetCountdownViewController zu haben, die SetCountdownViewController abstellt und meinen UISwitch abstellt, aber bis jetzt habe ich eine Handvoll Fehler und Bugs gefunden.Wie man einen UISwitch-Status einstellt, den View-Controller aufruft, Abbrechen drückt und ihn ausschalten lässt

sah ich einige Tutorials und sie alle sagten mir someSwitch.on und someSwitch.setOn([state, true/false], animated:[true/false])

und beide scheinen zu verwenden, zunächst zu arbeiten, keine Fehler auftauchen, kann ich bauen und laufen, aber wenn ich meine testen Funktionalität und drücken sie meine Taste abbrechen, es gibt mir eine Fehlermeldung, "Thread 1: EXC_BAD_INSTRUCTION (code = EXC_i386_INVOP, Subcode = 0x0)" auf der Linie, die sagt: "countdownSetSwitch.setOn (false, animiert: true) "

sowie "fataler Fehler: unerwartet gefunden Null beim Auspacken eines optionalen Wertes" in meinem Protokoll.

Ich habe eine Funktion, die es auf false zurücksetzen soll, aber das ist, wo der Fehler auftritt, egal wie/wo ich setzen .setOn, oder .on, gibt es mir diesen Fehler, und es scheint wie diese kann veraltet sein, aber sie sind irgendwie funktional für das Erstellen/Ausführen, bis sie tatsächlich aufgerufen werden.

func resetCountdownSwitch(){ countdownSetSwitch.setOn(false, animated: true) }

das ist meine Funktion.

Ich rufe es in meinem IBAction für meine Abbrechen-Taste hier.

@IBAction func countdownCancelButton(sender: AnyObject) { 


    createEventVC.resetCountdownSwitch() 
    dismissViewControllerAnimated(true, completion: nil) 
} 

jede Hilfe wäre toll, wenn Sie mehr Informationen benötigen ID glücklich, es zu geben, ich Swift ziemlich neu bin und iOS Entwicklung als Ganzes, so dass es ein Rookie Fehler sein kann, aber ich Ich bin ratlos.

+0

Es ist definitiv nicht veraltet. Wo rufst du diese Funktion an? Welcher viewController besitzt den Switch und in welchem ​​Zustand befindet er sich, wenn Sie ihn anrufen? – Dare

+0

Ich rufe diese Funktion in der IBAction meiner Cancel-Schaltfläche auf, CreateEventViewController besitzt den Switch, und standardmäßig ist er in der Off-Position gesetzt, aber ich habe SetCountdownViewController gesetzt, wenn der Status geändert wird. @Dare – GabrielMSC

+0

Zeigen Sie uns die Methoden, wo dies geschieht. Wenn Sie SetCountdownViewController präsentieren und versuchen, den Status von CreateEventViewController zu ändern, gibt es eine echte Chance, dass die Instanz bereits aufgehoben wurde, wenn Sie dies tun, und Sie eine Funktion mit Nil aufrufen. – Dare

Antwort

1

Das Beibehalten eines Verweises auf einen View-Controller, nachdem dieser nicht mehr sichtbar ist (weil ein anderer View-Controller dargestellt wurde), verspricht nicht, dass der View-Controller und seine Subviews nicht freigegeben werden. Überprüfen Sie this reference für eine Idee, wie der Ansichtslebenszyklus funktioniert.

Wahrscheinlich möchten Sie in der viewWillAppear-Methode von CreateEventViewController nach dem von Ihnen benötigten Status suchen und dort den Wert des Schalters festlegen. Es muss nicht animiert werden, da es noch nicht sichtbar ist. Wenn Sie wirklich möchten, dass die Klappe animiert wird, fügen Sie den Code hinzu, um Ihren Status zu überprüfen, und konfigurieren Sie stattdessen die Schaltfläche in viewDidAppear.

Ihr Absturz ist wahrscheinlich darauf zurückzuführen, dass createEventVCs Untersichten nicht mehr existieren, wenn Sie resetCountdownSwitch() aufrufen, und wenn Sie countdownSetSwitch.setOn aufrufen, rufen Sie die Funktion tatsächlich mit nil auf.