Was mach ich bei meinem Protokoll falsch?

S

silentx

Aktives Mitglied
Thread Starter
Dabei seit
30.08.2011
Beiträge
375
Reaktionspunkte
16
*.h Datei
Code:
@protocol WRResponseDelegate <NSObject>

@optional 
-(void) refresh;

@required

/* Antwort wird hierin gesendet, bzw. diese Funktion muss in dem ZielController enthalten sein */
-(void) responseDictionary:(NSMutableDictionary *)pdmuData;

@end

*.m Datei
Code:
-(void) sendRefresh:(UINavigationController *)pnav {
    NSLog(@"Refresh...");
    int lcount = pnav.viewControllers.count;
    [self setDelegate:[pnav.viewControllers objectAtIndex:lcount - 1]];
    [[self delegate] refresh];
    
}

Wenn es die Funktion gibt funktioniert es ohne Probleme sonst kommt folgende Fehlermeldung:
Code:
-[urLekaKarteEdit refresh]: unrecognized selector sent to instance 0x7f93d30

Will ja einfach der Controller sagen, dass er ein Refresh machen soll, falls es die Methode gibt, habe ich hier was vergessen? @optional sollte das doch machen oder nicht?
 
Hallo,

"optional" beschreibt nur, ob die Methode vorhanden sein muss. D.h. sie kann vorhanden sein, wenn gewünscht.
"required" besagt, dass sie zur Ausführung vorhanden sein muss.

D.h. aber noch lange nicht, dass das Delegate sie auch korrekt implementiert hat.

Du mußt prüfen, ob das Delegate das kann, oder nicht.

z.B. so:

Code:
id someDelegate = [self delegate];

if(!someDelegate)
{

	// ERR

	return;

}

if(![someDelegate respondsToSelector:@selector(schickSchnack:)])
{

	// ERR

	return;

}

// ok > Delegate gesetzt und kann mit der Methode umgehen

Viele Grüße
 
  • Gefällt mir
Reaktionen: silentx
Zurück
Oben Unten