2016-07-17 14 views
0

Ich habe eine ViewController Klasse. Es hat eine Kategorie ViewController (Details), die ausführt:Übergeben von Daten zwischen UIViewControllers mit Kategoriekonflikt

(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

die Details eines Objekts zu öffnen.

Wenn ich eine neue Schaltfläche zu meiner ViewController Klasse hinzufügen möchte ich einige Daten wie NSArray *myData an einen anderen Controller übergeben, sagen wir SearchController. Jedoch würde mein prepareForSegue niemals ausführen, da es in ViewController (Details) ist. Das Hinzufügen von prepareForSegue zu ViewController scheint es zu ignorieren.

Wenn ich Version von prepareForSegue innerhalb ViewController (Details) Arbeitsgeräte, die für meine SearchController funktioniert, aber es sieht nicht iVar NSArray *myData in ViewController erklärt. Idealerweise würde ich nicht eine neue Datenvar deklarieren wollen, die in ViewController (Details) gesetzt wird, weil es irrelevant ist.

Wie kann man Daten von einem Knopf tippen, wenn ViewController nicht ausgeführt wird prepareForSegue oder ViewController (Details) sieht die Datenvariable nicht? Irgendwelche Empfehlungen?

+0

Verwenden Sie etwas, um Ihre Daten zuerst wie CoreData, Realm oder statische Referenz zu speichern, spielt es keine Rolle. Wenn Sie für Ihre Daten einen unidirektionalen Datenfluss verwenden, ist es wichtig, dass Sie dieses Problem nie wieder bekommen, da Sie keine Daten zwischen Klassen austauschen müssen. Stattdessen erhalten Sie immer Daten aus einer einzigen Quelle der Wahrheit das ist es. –

+0

Bitte Code anzeigen --- nur der dazugehörige Code --- aus dem VC und der Kategorie. – danh

+0

Und @ JanCássio hat ziemlich genau recht: vcs sollte selbst auf das App-Modell zugreifen. Sie müssen jedoch manchmal Daten weitergeben, wenn der Benutzer beispielsweise einen Aspekt des Modells in vcA auswählt, und vcBs Aufgabe darin besteht, Details darüber zu präsentieren, ist es sinnvoll und notwendig, dass vcA Daten an vcB "weitergibt", sofern es kommuniziert eine Auswahl. – danh

Antwort

0

Sie sollten Kategorien nicht verwenden, bis sie benötigt werden. Stattdessen sollten Sie Klassen und ein zusammengesetztes Muster verwenden, wenn Sie große Klassen auf Submodulen teilen müssen. Kategorien überschreiben Methoden für Klassen und werden in nicht definierter Reihenfolge geladen. Mehrere Kategorien, die dieselbe Methode implementieren, können zu Problemen bei der Fehlersuche führen. Kategorien erlauben es nicht, etwas in Instanzen zu speichern, ohne assoziierte Objekte zu verwenden, was hässlich und teurer ist als die von Ivars.

Verwandte Themen