Was mach ich bei meinem Protokoll falsch?

silentx

Mitglied
Thread Starter
Mitglied seit
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
Mitglied seit
06.06.2006
Beiträge
4.629
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
 
Oben