Frage

Ok, ich bin Programmierung in Objective-C und Xcode. Ich habe durch die Dokumentation auf dem Apple-Website zu lesen und zu verstehen, welche Delegierten sind aber als ich zum Teil kommen, wo er darüber spricht, wie eigentlich Delegatmethoden in Code zu implementieren, ich nur verwirrt, vor allem wenn sie sagen, so etwas wie „jetzt die Delegierten implementieren Methode." Vielleicht ist es nur mich, aber ich weiß nicht genau, wo das Verfahren zu implementieren (wäre die richtige Lage in einer einfachen Situation der AppDelegate.h / .m-Datei sein, wo ich nur die Viewcontroller und AppDelegate Klasse haben?). Ich denke, wirklich der beste Weg für mich zu lernen, ist ein sehr einfaches Beispiel zu sehen.

Ich habe einige Codes unten, und ich frage mich, ob jemand durch gehen könnte und mir zeigen, wie die Delegierten den Viewcontroller zu verbinden, so dass es die Summe zeigt? Sorry, wenn der Code sieht lange, aber dies ist die einfachste Delegation Beispiel, das ich denken konnte. Aus Gründen der Argumentation und mit weniger Code betrachten (so dass es leichter für mich, um zu sehen, was los ist), kann sagen, Serverclass * Server einen Server und ClientClass * Client implementiert implementiert einen Client. Beide sind bereits miteinander verbunden sind und warten auf Eingabe ihrer Nummer. Ich setze auf, was ich denke, wäre richtig, aber ich weiß sicher, dass es nicht vollständig ist (soweit Verbindung des Delegierten sowohl auf Server und Client). Eine Sache, ich weiß nicht, wo zu setzen sind die Protokollerklärungen, also wenn jemand könnte bitte dieses einfache Problem tun, würde es mir helfen, so weit viel, wie zu lernen, wie ein Delegierter in eine Klasse implementiert wird.

By the way, ich arbeite mit den Peer-Picker im neuen GameKit des iPhone SDK 3.0, wenn jemand mir auch zeigen möchte, was zu dem, was verbindet. Zum Beispiel, ich bin a href bei <= "http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/GameKit_Guide/FindingPeerswithPeerPicker/FindingPeerswithPeerPicker.html#//apple_ref/doc/uid/TP40008304-CH102 -SW1" rel = "nofollow noreferrer"> Schritt 3 der Apple-Führung für Peer Picker . Nun, ich weiß nicht, wo Sie Schritt 5 in meinem Projekt geht. Vielen Dank an alle, die mir helfen, diese Delegierten Implementierung verstehen kann ... Sie alle toll gewesen, so weit!

ExampleAppDelegate.h

#import <UIKit/UIKit.h>

@class ExampleAppViewController;

@interface ExampleAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    ExampleAppViewController *viewController;
    int sum;
}

@property (nonatomic, retain) sum;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ExampleAppViewController *viewController;

-(void) addNum:(int)num;
@end

ExampleAppDelegate.m

#import "ExampleAppDelegate.h"
#import "ExampleAppViewController.h"

@implementation ExampleAppDelegate

@synthesize window;
@synthesize viewController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    application.idleTimerDisabled = YES;

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}


- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}

-(void)addNum:(int)num {
    sum += num;
}

@end

ExampleAppViewController.h

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface ExampleAppViewcontroller : NSObject {
        IBOutlet UILabel *sumField; // will display the total sum, one number entered //by the server and one entered by the client, on both iPhones after calculation

        int sum; // the total sum after addition;
        ServerClass *server; // some server
        ClientClass *client; // some client
        int num; // the number to add to sum
}

@property(nonatomic, assign) sum;
@property(nonatomic, retain) num;

-(void) displaySum;
@end

ExampleAppViewController.m

#import "ExampleAppViewcontroller.h"

@implementation ExampleAppViewController

@synthesize sum;
@synthesize num;

-(void) displaySum {
    [sumfield setText: @"%i", sum];
}

@end
War es hilfreich?

Lösung

Ich werde nicht in jede detaillierte Analyse des Codes gehen Sie auf dem Laufenden - die hilfreiche Antwort Sie ist einige Richtung so weit als allgemeine Grundsätze, die eine bestimmte Codebeispiel überschreiten konnte. Hier sind die allgemeinen Grundsätze ...

  • Ein Delegierter ist ein Objekt, dessen Objekte (in der Regel) genannt auf bestimmte Ereignisse oder Aktionen zu behandeln oder zu reagieren.
  • Sie müssen „sagen“ ein Objekt, das einen Delegierten akzeptiert, dass Sie die Delegierten sein wollen. Dies geschieht durch den Aufruf von [object setDelegate:self]; oder Einstellung object.delegate = self; in Ihrem Code.
  • Die Aufgabe, die als die Delegierten sollten die angegebenen Delegatmethoden implementieren. Das Objekt definiert oft Methoden entweder in einem Protokoll oder auf NSObject über eine Kategorie als Standard / leere Methoden, oder beides. (Der formale Protokoll-Ansatz ist wahrscheinlich sauberer, vor allem jetzt, dass Objective-C 2.0 Fakultativprotokoll Methoden unterstützt.)
  • Wenn ein relevantes Ereignis eintritt, überprüft die rufende Objekt zu sehen, ob die Stellvertretung das Matching-Verfahren (unter Verwendung von -respondsToSelector:) implementiert und ruft diese Methode, wenn es funktioniert. Der Delegierte hat dann zu steuern, was es muss tun, um zu antworten, bevor die Steuerung an den Aufrufer zurück.

Im konkreten Beispiel Sie arbeiten durch, feststellen, dass GKPeerPickerController hat eine Eigenschaft mit dem Namen delegate , die ein Objekt des Typs akzeptiert id<GKPeerPickerControllerDelegate> . Dies bedeutet eine id (jede Unterklasse von NSObject), die die Methoden in dem GKPeerPickerControllerDelegate Protokoll implementiert. GKPeerPickerControllerDelegate wiederum definiert eine Anzahl von Delegatmethoden und beschreibt, wann sie aufgerufen werden. Wenn Sie eine oder mehrere dieser Methoden implementieren (die Dokumentation sagt alle optional sind, aber zwei zu erwarten sind) und melden Sie sich als Delegierter, werden diese Methoden aufgerufen werden. (Beachten Sie, dass Sie nicht brauchen eine Methode Prototyp in Ihrer .h-Datei zu erklären, nur um die Protokoll-Header importieren und die Methode in der .m-Datei zu implementieren.

Andere Tipps

Ich lerne ObjC und iPhone Entwicklung. Ich würde nicht so weit nach oben erreichen, wie zu sagen, dass ich verstehe, Delegierten und deren Verwendung perfekt. Ihre erste iPhone Anwendung gefunden auf dem Entwicklerportal auf Apple-Website, Spaziergänge im Detail ein sehr einfaches Beispiel, das ein Verfahren außer Kraft zu setzen Nutzung der Delegierten TextField- macht durch die Tastatur verschwindet bei der Bearbeitung auf dem TextField- erfolgt. Zum Beispiel, wenn ich relevante Schnipsel von dort einfügen kann:

// MyViewController.h
#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController <UITextFieldDelegate> {
        UITextField *textField;
        UILabel *label;
        NSString *string;
}

@property (nonatomic, retain) IBOutlet UITextField *textField;
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, copy) IBOutlet NSString *string;

- (IBAction)changeGreeting:(id)sender;

@end


// MyViewController.m
#import "MyViewController.h"

@implementation MyViewController

@synthesize textField;
@synthesize label;
@synthesize string;

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        if (theTextField == textField) {
                [textField resignFirstResponder];
        }
        return YES;
}

@end

Hier drüben ist textFieldShouldReturn ein Verfahren, das Teil des UITextFieldDelegate Protokolls ist. So viel wie ich es verstanden habe, was wichtig ist, ist, dass welche auch immer Klasse, die Sie die Delegatmethoden in, dass die Klasse implementieren muss folgt diesen bestimmt Delegierten-Protokoll (durch einen Protokollnamen in spitzen Klammern unmittelbar neben eingeschlossen ist zu der Name der Klasse erbt von).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top