Was mach ich bei meinem Protokoll falsch?

silentx

Mitglied
Thread Starter
Registriert
30.08.2011
Beiträge
375
*.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?
 

little_pixel

Aktives Mitglied
Registriert
06.06.2006
Beiträge
4.632
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
 

Ähnliche Themen

Oben