[ObjC] Delegates

nico525

Ensign
Registriert
Feb. 2009
Beiträge
185
Hallo Leute,

Zurzeit eigne ich mir ein bisschen Cocoa an, weil ich mich für die iOS Spieleentwicklung interessiere. Mein Problem ist derzeit allerdings eher grundlegender Natur und hängt denke ich auch mit dem MVC-Konzept zusammen. Ich möchte daher kurz beschreiben wobei ich mir nicht sicher bin:

In meiner App sollen des öfteren nach der Eingabe Daten aus dem Netz geladen werden. Diese werden anschließen geparst und sollen ausgegeben werden. Daher dachte ich mir, dass es doch geschickt wäre eine Art WebHander zu schreiben. Dieses Singleton (Weil es auch diverse Variablen wie userID, Name etc für später speichern soll, die bei jeder Abfrage erneut übergeben werden müssen) soll dann also eine Abfrage aus dem WebStarten, die Datei parsen und anschließend etwas ausgeben.
Das müsste, so weit ich verstanden habe, mit Delegates zusammenhängen, allerdings verstehe ich nicht wie ich jetzt von dem WebHandler aus, wieder eine Funktion aus dem ViewController aufrufen kann.

Da der WebHandler jetzt auch noch von mehreren ViewControllern aus genutzt werden soll, denke ich dass ich irgendwie die Methode "parseFinished" des WebHandlers durch den jeweiligen ViewController überschreiben und die Ausgabe vorbereiten muss??!

Sorry aber bei dieser Delegate-Sache blicke ich nicht durch... Im Prinzip kann ich derzeit nur vom ViewController aus auf den WebHandler zugreifen (Einbahnstraße), allerdings soll der WebHandler, nachdem der Download fertig ist auch auf den ViewController zugreifen können.

Ich hoffe das war einigermaßen verständlich erklärt und ihr könnt mir dazu weiterhelfen. Eventuell ist ja auch einfach mein Konzept dahinter Schrott?

Nico
 
ja ich rufe eine Methode des WebHandlers auf, die u.a. eine NSURLConnection aufbaut:

Code:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.de"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

und dann wird das ganze ja in der

Code:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Methode abgefrühstückt
 
Singleton ist oft ein Anti-Pattern. Solltest du noch einmal genau überlegen. Und wegen den Delegates werd ich mal observer Pattern in den Raum.
 
Ich weiß nicht, ich fand das Konzept des Singletons hier eigentlich ganz passend...
Sonst müsste ich bspw bei jedem refresh den WebHandler neu erzeugen, ihm die passenden Parameter neu übergeben, die ich irgendwo zwischenspeichern muss, und ihn danach wieder zerstören...


Dieses Observer Pattern werde ich mal googlen - danke schon mal
 
delegates sind hier das Mittel der Wahl, wann die Informationen/Daten der erfolgreichen Connection weiter verarbeiten willst. Die Frage ist, wie sieht deine Testapp aus? Du musst natürlich auch drauf achten, dass jenes Instance welches die Delegates empfängt auch noch existiert. Das Problem hatte ich mit den Delegates auch schon öfters ;).
 
Super, freut mich zu hören.
Wenn du ein bisschen tiefer in Design Patterns einsteigen willst empfehle ich das entsprechende Buch der "von Kopf bis Fuß" Reihe (auf Englisch Head first glaube ich). Google spuckt da sogar einen Downloadlink von ebooks-it.net aus wenn du nach Design Pattern headfirst suchst. Bin mir aber nicht sicher wie seriös die Seite ist, aber in der Bibliothek sollte es das auch geben.

Und für Tutorials Allgemein empfehle ich dir noch die Webseite von www.raywenderlich.com
 
Zuletzt bearbeitet:
Zurück
Oben