objective-c-Protokoll die Delegierten
Bin ich zu verstehen, wie die Delegierten die Arbeit gegangen Mulde einige Beispiele, aber jetzt mit Basis-app für die Prüfung, es scheint, dass ich noch nicht hab,
hier mein code:
Klasse definiert Protokoll - > *.h
#import <Foundation/Foundation.h>
@protocol protoPerra <NSObject>
-(void) dimeTuNombre:(NSString *) s;
@end
@interface MyClassic : NSObject {
id<protoPerra> _delegate;
}
@property (assign) id<protoPerra> delegate;
@end
Klasse die Protokoll - > *.m
#import "MyClassic.h"
@implementation MyClassic
@synthesize delegate = _delegate;
- (id)init
{
self = [super init];
if (self) {
//Initialization code here.
[[self delegate] dimeTuNombre:@"pinguete"];
}
return self;
}
-(void) dealloc {
[_delegate release];
_delegate = nil;
[super dealloc];
}
@end
Klasse Verabschiedung Protokoll:
#import "MyClassic.h"
@interface MainViewController : UIViewController (protoPerra)
.m
#import "MainViewController.h"
@implementation MainViewController
-(void) dimeTuNombre {
NSLog(@"ss9!! tkt");
}
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *lava = [[[UILabel alloc] initWithFrame:CGRectMake(30, 100, 100, 20)] autorelease];
lava.text = @"lava ss9";
[self.view addSubview:lava];
MyClassic *pirr = [[[MyClassic alloc] init ] autorelease];
[pirr setDelegate:self];
}
-(void) dimeTuNombre:(NSString *)s {
NSLog(@"%@",s);
}
@end
so, was fehlt in diesem einfachen Beispiel, damit es funktioniert mit meinem delegieren?
vielen Dank!
Bitte beachten Sie, das ich verwendet habe () anstelle der <> [im .h von der Annahme class] als wenn ich den Sparren, der code verschwindet
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie die delegate-Methode (dimeTuNombre:) in MyClassic init, aber die Delegierten nicht noch einstellen, so dass Sie entweder Umdenken müssen, wenn Sie anrufen dimeTuNombre: oder umgestalten der MyClassic Klasse über einen Konstruktor verfügen, wie
statt nur einfache init.
Klären, in Ihrer aktuellen code legen Sie die Stellvertretung in MainViewController.h wenn Sie [pirr setDelegate:self]; - das setzt den Wert "delegieren" der Eigenschaft von MyClassic auf die aktuelle Instanz von MainViewController. Beachten Sie, dass beim Aufruf MyClassic init, wird der Delegat nicht noch, also die [[self delegate] dimeTuNombre:@"pinguete"]; Aufruf nichts (delegieren, ist null-in diesem Punkt).
Könnten Sie ändern Ihre MyClassic Konstruktor wie folgt:
Dann stattdessen:
Tun Sie dies:
Dies funktionieren wird, aber beachten Sie, dass in der Regel die Delegierten werden für die Benachrichtigungen der verschiedenen Arten - wie eine Schaltfläche Bericht angeklickt wurde oder ein socket, sagt er erhalten hat, einige Daten.
Ich denke, dass Paul Hegarty von der Stanford University, gab eine sehr gute Zusammenfassung auf wie zu verwenden-Protokoll in Lektion 9, Entwicklung von apps für iOS -, Herbst-Sitzung 2011(verfügbar in iTunes, überprüfen Sie die Paul ' s blog):
Paul gab auch ein Beispiel dafür, wie mit Protokoll in eine Rechner-app.
Erste, das Protokoll ist erstellt:
Schritt 2). In der Tabellenansicht CalculatorProgramsTableViewController.h, ein delegate ist definiert als eine schwache verknüpfte id-Eigenschaft:
Durch Verwendung des Protokolls, das die Tabelle anzeigen, wird in der Lage sein, zu senden der Nachricht über ein Programm geändert wird, aber die Ansicht nicht über die Grafik-Ansicht. Dies geschieht im nächsten Schritt.
Schritt 3). In den table view controller delegate wird verwendet, um eine Nachricht zu senden, um sich über das Programm geändert:
Schritt 4). Wo ist die Stellvertretung festgelegt wurde? Es ist in der calculatorGraphViewController (rechts-Ansicht im split-Ansicht). Wenn ein übergang ist bereit zum verschieben eines pop-up-anzeigen, (Tabelle anzeigen), setzt es sich selbst als ein Delegierter:
Der grafischen Ansicht nicht über die Tabelle ansehen, die Kommunikations-Kanal aufgebaut ist, die durch das Protokoll, schön gemacht ohne Kupplung! Um für alle Delegierten zurück zu fordern, dieses Protokoll, die Grafik view-controller ist .h-Datei hat, um das Protokoll umzusetzen:
Und der Methode von Protokoll definiert ist .m-Datei im nächsten Schritt.
Letzten Schritt. Die delegate-Protokoll-Methode implementiert, in der segue-controller. Die Protokoll-Methode wird aufgerufen, wenn eine Zeile in der Tabellen-Ansicht ausgewählt ist:
Oben ist eine typische Art und Weise zu verwenden-Protokoll in iOS-app.