Problème de callBack en passant en mode ARC
Bonjour,
J'ai comme projet d'actualiser un (vieux) code avec l'ARC, il ne me reste plus qu'une erreur.
Ce code mélange du C++ et de l'objective C.
Le délire c'est que j'utilise un callback que j'ai appelé mCallback pour allez cherchez des informations dans une fonction "alert".
J'ai défini mCallback en tant qu'objet "id".
Ma fonction "alert" est défini dans un fichier en c++ quand je veux utiliser dans un autre fichier mais également en C++:
if ([mCallBack respondsToSelector:@selector(alert]) {
NSDictionary* info;
info = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:channelSelect], @channel, nil ];
[mCallback alert:info];
j'ai comme message d'erreur "NO KNOW INSTANCE METHOD FOR SELECTOR "ALERT"
Réponses
- (void) alert : (NSDictionnary*) dict;
C'est un peu léger comme réponse ^^
Je vois d'ailleurs que tu es nouveau, je t'invite à aller te présenter dans la section "Présentation des Membres" du forum pour qu'on en sache un peu plus sur toi, ton background, ton niveau, ton expérience... qu'on ne t'explique pas le B-A-BA si tu le connais déjà ou à l'inverse qu'on ne te parle pas chinois si tu débutes.
Alors c'est un peu compliqué enfin du moins pour moi,
Mais la fonction alert est implémenté dans Un objet (que l'on va appeler A pour simplifier)
Cette objet hérite de NSObject, avec un .h et un .mm on implémente cette méthode que dans le .mm (je crois que c'est pour la rendre privée)
Puis l'autre objet a également un .h et .mm, j'implémente le callback avec id dans le .h et apres dans le .mm j'insere le code ci dessus.
Avant que je convertisse mon code en ARC ça marché mais maintenant je ne peux plus.
En fait la l'objet A est situé bien plus haut dans la hierarchie, ce qui m'empeche de l'importer dans le nouvel objet. Ce matin je pars sur la piste des protocoles.
J'ai trouvé la solution,
dans le B .h
- (void)alert:(NSDictionary*) dict;
- (BOOL)respondsToSelector:(SEL)aSelector;
@end
Faire plutôt se conformer ton protocole au protocole <NSObject>, c'est lui qui fournit les déclarations de ces méthodes.
Après comme j'ai du mal à comprendre tes explications sur ton architecture et organisation de ton code, je ne suis pas sûr qu'un @protocol soit la solution la plus adaptée à ton problème. Si tu avais déjà déclaré la méthode "-alert:" dans l'@interface de ta classe, et #importé cette interface, il ne devrait pas y avoir de raison pour que le compilateur se plaigne de ne pas connaà®tre le @selector associé, donc il ne devrait pas être nécessaire de faire un @protocol juste pour ça...
PS : Merci à l'avenir d'utiliser les balises CODE dans ton message (tu as même un bouton dans la barre de rédaction de tes messages pour les insérer si tu trouves ça plus pratique) pour formatter ton code proprement et le rendre plus lisible (je t'invite même à éditer tes messages existants pour rajouter cette balise autour de ton code)