[Swift] Label auf einer anderen View ändern

Verwirrter

Tokyo Rose
Registriert
09.02.15
Beiträge
66
Hallo,
ich habe folgendes Problem:
Auf einem NS View Controller gibt es einen Button, der einen Segue zu einem zweiten NS View Controller öffnen soll.
Das mit dem Segue funktioniert auch, allerdings soll beim Klick auf den Button zusätzlich ein Funktion ausgeführt werden, die ein Label auf dem zweiten NS View Controller ändert.
Ich habe dem Button in einer Klasse eine IBAction zugewiesen. Mittels "print()" habe ich nun feststellen müssen, dass diese Funktion gar nicht ausgeführt wird.
Wenn ich einen zweiten Button mit der Funktion verlinke und die Funktion zusätzlich noch damit erweitere, dass sie das Einblenden des Segues durch Code ausführt, erscheint folgende Fehlermeldung:
fatal error: unexpectedly found nil while unwrapping an Optional value

(lldb)
Beide NS View Controller haben dieselbe Klasse zugewiesen bekommen und das Label wird vorher auch mit IBOutlet in der Klasse deklariert.

Wo liegt der Fehler?

Danke :)
 

Verwirrter

Tokyo Rose
Registriert
09.02.15
Beiträge
66
Okay, habe das ganze jetzt so gemacht, wie ich es verstanden habe (2 verschiedene Möglichkeiten).
Code:
@IBAction func settextfield(sender: AnyObject) {
       performSegueWithIdentifier("Test", sender: nil)
        super.viewDidLoad(MyCheckbox.state = 0)
    }
Code:
@IBActionfunc settextfield(sender: AnyObject) {
        performSegueWithIdentifier("Test", sender: nil)
        super.viewDidLoad()
        MyCheckbox.state = 0
    }
Leider wird Mir immer noch derselbe Fehler wie vorher ausgegeben.
:/
 
Zuletzt bearbeitet:

KALLT

deaktivierter Benutzer
Registriert
12.11.08
Beiträge
1.523
Versuche es mal mit der Funktion prepareForSegue() von der UIViewController-Klasse (die musst du überschreiben). Die ist genau für solche Zwecke gedacht. Du kannst damit nämlich den zweiten ViewController selbst instanzieren und die Properties entsprechend ändern. Ein ganz einfaches Beispiel findest du im Vorlageprojekt Master–Detail Application.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Versuche es mal mit der Funktion prepareForSegue() von der UIViewController-Klasse (die musst du überschreiben).
Hier geht es um OS X. Da gibt es keinen UIViewController.;)

Du kannst damit nämlich den zweiten ViewController selbst instanzieren
In prepareForSegue() bitte keine Instanz selbst erstellten, sondern von der übergebenen NSStoryboardSegue sich den destinationController geben lassen.
 

Verwirrter

Tokyo Rose
Registriert
09.02.15
Beiträge
66
[...]
In prepareForSegue() bitte keine Instanz selbst erstellten, sondern von der übergebenen NSStoryboardSegue sich den destinationController geben lassen.
Okay, ich habe jetzt etwas gegoogelt und in die Klasse des ersten Fensters um folgenden Code ergänzt:
Code:
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "segueTest") {
            let yourNextViewController = (segue.destinationController as! TestController)
            yourNextViewController.receivedData = "test"
           
        }
    }
Allerdings erhalte ich folgenden Fehler: "Value of Type 'TestController' has no member 'receivedData'"
In der zweiten Klasse werde ich zudem darauf hingewiesen, dass es die Variable nicht gebe.
 

Verwirrter

Tokyo Rose
Registriert
09.02.15
Beiträge
66
Okay, habe jetzt die entsprechenden Variablen auf "" gesetzt ... Warum klappt es denn nicht mit der Funktion in der ersten Klasse?
 

Tobias Scholze

Apfeltalk Entwicker
AT Redaktion
Registriert
15.07.09
Beiträge
1.581
Hi,
was ist für dich die erste Klasse? :) Sorry, ist etwas schwer hier den Überblick zu behalten.

Grüße, Tobi
 

Tobias Scholze

Apfeltalk Entwicker
AT Redaktion
Registriert
15.07.09
Beiträge
1.581
Hi,
poste doch bitte mal den ganzen Source bzw. füge bitte dein Projekt als zip dem Thread hinzu. :)

Grüße, Tobi
 

Verwirrter

Tokyo Rose
Registriert
09.02.15
Beiträge
66
Hey,
danke für Eure ganzen Tipps, es funktioniert jetzt.
:)

Zeitweise wurden noch Fehler ausgegeben, aber nur, weil ich in der ersten Klasse noch die IBOutles des zweiten Fensters hatte.
 
  • Like
Reaktionen: Tobias Scholze