Als Neuling bei Objective-C, Kakao und iPhone-Entwicklern im Allgemeinen habe ich den starken Wunsch, das Beste aus der Sprache und den Frameworks herauszuholen.
Eine der Ressourcen, die ich verwende, sind die CS193P-Klassennotizen von Stanford, die sie im Web hinterlassen haben. Es enthält Vorlesungsunterlagen, Aufgaben und Beispielcode, und da der Kurs von Apple-Entwicklern gehalten wurde, halte ich ihn definitiv für "aus dem Maul des Pferdes".
Klassen-Website:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
Vorlesung 08 bezieht sich auf eine Aufgabe zum Erstellen einer UINavigationController-basierten App, bei der mehrere UIViewController auf den UINavigationController-Stapel übertragen werden. So funktioniert der UINavigationController. Das ist logisch. Die Folie enthält jedoch einige strenge Warnungen bezüglich der Kommunikation zwischen Ihren UIViewControllern.
Ich werde aus dieser ernsthaften Folie zitieren:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Seite 16/51:
So teilen Sie keine Daten
- Globale Variablen oder Singletons
- Dies schließt Ihren Anwendungsdelegierten ein
- Direkte Abhängigkeiten machen Ihren Code weniger wiederverwendbar
- Und schwieriger zu debuggen und zu testen
OK. Ich bin damit fertig. Werfen Sie nicht blind alle Ihre Methoden, die für die Kommunikation zwischen dem Viewcontroller verwendet werden, in Ihren App-Delegaten und verweisen Sie auf die Viewcontroller-Instanzen in den App-Delegat-Methoden. Fair 'nuff.
Ein Stück weiter, bekommen wir diese Folie uns sagen , was wir sollten tun.
Seite 18/51:
Best Practices für den Datenfluss
- Finden Sie genau heraus , was kommuniziert werden muss
- Definieren Sie Eingabeparameter für Ihren View Controller
- Verwenden Sie für die Kommunikation zur Sicherung der Hierarchie eine lose Kopplung
- Definieren Sie eine generische Schnittstelle für Beobachter (wie Delegierung).
Auf diese Folie folgt dann eine scheinbar Platzhalterfolie, auf der der Dozent anscheinend anhand eines Beispiels mit dem UIImagePickerController die Best Practices demonstriert. Ich wünschte, die Videos wären verfügbar! :((
Ok, also ... ich fürchte, mein Objekt ist nicht so stark. Ich bin auch ein bisschen verwirrt von der letzten Zeile im obigen Zitat. Ich habe ziemlich viel darüber gegoogelt und einen anständigen Artikel gefunden, der über die verschiedenen Methoden der Beobachtungs- / Benachrichtigungstechniken spricht:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-Observing.html
Methode 5 zeigt sogar Delegierte als Methode an! Außer .... Objekte können jeweils nur einen Delegaten festlegen. Was soll ich also tun, wenn ich mehrere Viewcontroller-Kommunikation habe?
Ok, das ist die aufgebaute Bande. Ich weiß, dass ich meine Kommunikationsmethoden im App-Delegaten leicht ausführen kann, indem ich auf die mehreren Viewcontroller-Instanzen in meinem Appdelegate verweise, aber ich möchte so etwas richtig machen.
Bitte helfen Sie mir, "das Richtige zu tun", indem Sie die folgenden Fragen beantworten:
- Wenn ich versuche, einen neuen Viewcontroller auf dem UINavigationController-Stack zu pushen, wer sollte diesen Push ausführen? Welche Klasse / Datei in meinem Code ist der richtige Ort?
- Was ist der "richtige" Weg, wenn ich Daten (Wert eines iVar) in einem meiner UIViewController beeinflussen möchte, wenn ich mich in einem anderen UIViewController befinde?
- Geben Sie an, dass in einem Objekt jeweils nur ein Delegat festgelegt werden kann. Wie würde die Implementierung aussehen, wenn der Dozent sagt: "Definieren Sie eine generische Schnittstelle für Beobachter (wie Delegation)" . Ein Pseudocode-Beispiel wäre hier nach Möglichkeit sehr hilfreich.