Einfaches Delegiertenbeispiel?

8

Ok, ich programmiere in Ziel-C und verwende Xcode. Ich habe die Dokumentation auf Apples Website durchgelesen und verstehe, was Delegierte sind, aber wenn ich zu dem Teil komme, in dem es darum geht, Delegiertenmethoden in Code zu implementieren, werde ich einfach verwirrt, besonders wenn sie sagen: "Implementiere jetzt die Delegierten Methode." Vielleicht ist es nur ich, aber ich weiß nicht genau, wo die Methode implementiert werden soll (wäre die AppDelegate.h / .m-Datei der richtige Ort in einer einfachen Situation, in der ich nur die ViewController- und AppDelegate-Klasse habe?). Ich denke, der beste Weg für mich zu lernen ist, ein sehr einfaches Beispiel zu sehen.

Ich habe unten einen Code und ich frage mich, ob jemand durchgehen und mir zeigen könnte, wie man den Delegaten mit dem ViewController verbindet, so dass er die Summe anzeigt? Entschuldigung, wenn der Code lang aussieht, aber dies ist das einfachste Delegierungsbeispiel, das mir einfällt. Aus Gründen der Argumentation und weniger Code zu sehen (macht es mir einfacher zu sehen, was passiert), sagen ServerClass * Server implementiert einen Server und ClientClass * -Client implementiert einen Client. Beide sind bereits miteinander verbunden und warten darauf, ihre Nummer einzugeben. Ich gebe an, was ich für richtig halte, aber ich weiß, dass es nicht vollständig ist (soweit es den Delegaten sowohl mit dem Server als auch mit dem Client verbindet). Eine Sache, die ich nicht kenne, sind die Protokolldeklarationen. Wenn also jemand dieses einfache Problem lösen könnte, würde es mir sehr helfen, zu lernen, wie ein Delegat in einer Klasse implementiert wird.

Übrigens arbeite ich mit dem Peer Picker im neuen GameKit des iPhone SDK 3.0, wenn mir jemand auch zeigen möchte, was sich mit was verbindet. Zum Beispiel bin ich bei Schritt 3 des Apple-Leitfadens für Peer Picker . Jetzt weiß ich nicht, wo Schritt 5 in mein Projekt geht. Danke an alle, die mir helfen können, diese Delegierten-Implementierung zu verstehen ... Ihr wart alle bisher großartig!

BeispielAppDelegate.h

%Vor%

BeispielAppDelegate.m

%Vor%

BeispielAppViewController.h

%Vor%

BeispielAppViewController.m

%Vor%     
Josh Bradley 27.06.2009, 00:43
quelle

2 Antworten

12

Ich werde auf keine detaillierte Analyse des von Ihnen geposteten Codes eingehen - die hilfreichste Antwort, die Sie erhalten könnten, ist eine gewisse Richtung, was allgemeine Prinzipien betrifft, die über ein bestimmtes Codebeispiel hinausgehen. Hier sind die allgemeinen Prinzipien ...

  • Ein Delegat ist ein Objekt, dessen Objekte (allgemein) aufgerufen werden, um bestimmte Ereignisse oder Aktionen zu behandeln oder darauf zu reagieren.
  • Sie müssen ein Objekt "angeben", das einen Delegaten akzeptiert, der Delegat sein soll. Dies geschieht durch Aufruf von [object setDelegate:self]; oder durch Setzen von object.delegate = self; in Ihrem Code.
  • Das Objekt, das als Delegat agiert, sollte die angegebenen Delegate-Methoden implementieren. Das Objekt definiert häufig Methoden entweder in einem Protokoll oder auf NSObject über eine Kategorie als Standard / leere Methoden oder beides. (Der formale Protokollansatz ist wahrscheinlich sauberer, besonders jetzt, da Objective-C 2.0 optionale Protokollmethoden unterstützt.)
  • Wenn ein relevantes Ereignis auftritt, überprüft das aufrufende Objekt, ob der Delegat die übereinstimmende Methode implementiert (mit -respondsToSelector: ) und ruft diese Methode auf, wenn dies der Fall ist. Der Delegat hat dann die Kontrolle, alles zu tun, was er antworten muss, bevor er die Kontrolle an den Aufrufer zurückgibt.

Beachten Sie in dem konkreten Beispiel, das Sie durcharbeiten, GKPeerPickerController eine Eigenschaft mit dem Namen delegate , die ein Objekt vom Typ id<GKPeerPickerControllerDelegate> akzeptiert. Dies bedeutet eine id (jede Unterklasse von NSObject), die die Methoden im GKPeerPickerControllerDelegate -Protokoll implementiert. GKPeerPickerControllerDelegate definiert wiederum eine Reihe von Delegate-Methoden und beschreibt, wann sie aufgerufen werden. Wenn Sie eine oder mehrere dieser Methoden implementieren (die Dokumentation sagt, dass alle optional sind, aber zwei erwartet werden) und sich als Delegat registrieren, werden diese Methoden aufgerufen. (Beachten Sie, dass Sie in Ihrer .h-Datei keinen Methodenprototyp deklarieren müssen, importieren Sie einfach den Protokollheader und implementieren Sie die Methode in Ihrer .m-Datei.

    
Quinn Taylor 27.06.2009, 05:24
quelle
1

Ich lerne ObjC und iPhone Entwicklung. Ich würde nicht so weit kommen, um zu sagen, dass ich Delegierte und deren Verwendung perfekt verstehe. Ihre erste iPhone-Anwendung im Entwicklerportal von Apple Website, führt im Detail ein sehr einfaches Beispiel durch, das den Delegaten des TextFields verwendet, um eine Methode außer Kraft zu setzen, die die Tastatur verschwinden lässt, wenn die Bearbeitung des TextFields abgeschlossen ist. Zum Beispiel, wenn ich relevante Snippets von dort einfügen kann:

%Vor%

Hier ist textFieldShouldReturn eine Methode, die Teil des Protokolls UITextFieldDelegate ist. So sehr ich es verstanden habe, ist es wichtig, dass die Klasse dem jeweiligen Delegatsprotokoll folgt, indem sie einen Protokollnamen in spitzen Klammern in unmittelbarer Nähe von der Name der Klasse, von der er erbt).

    
ayaz 27.06.2009 05:58
quelle