Appel Méthode d'une classe

Bonjour,



Est ce possible d'appeler une méthode de classe a partir d'un NSString ?



exemple:


<br />
NSString *cmd = @&quot;orderOut:nil&quot;;<br />
<br />
NSWindow *maFenetre;<br />
<br />
[maFenetre orderOut:nil];<br />
<br />
J&#39;aimerais faire le même appel en utilisant *cmd<br />
<br />

Réponses

  • CeetixCeetix Membre
    mai 2012 modifié #2
    Oui, en faisant :
    [maFenetre performSelector:NSSelectorFromString(cmd)];
    
  • merci beaucoup
  • AliGatorAliGator Membre, Modérateur
    Juste pour info pour utiliser le bon vocabulaire, il s'agit d'une méthode d'instance et pas de classe dans le cas d'exemple que tu as cité image/wink.png' class='bbc_emoticon' alt=';)' />
  • JegnuXJegnuX Membre
    Et si je dis pas de connerie, pour que ça fonctionne c'est plus ça qu'il faut faire :


    <br />
    NSString *cmd = @&quot;orderOut:&quot;;<br />
    NSWindow *maFenetre;<br />
    [maFenetre performSelector:NSSelectorFromString(cmd) withObject:nil];<br />
    
  • CeetixCeetix Membre
    mai 2012 modifié #6
    Je suis d'accord avec toi JegnuX mais là  comme son paramètre est à  nil tu n'es pas obligé, si ?

    Enfin c'est sûr que s'il passe en param autre que nil bah il faut utiliser ta méthode.
  • devulderdevulder Membre
    mai 2012 modifié #7
    Comme je ne connais le nombre de parametres a l'avance



    j'ai vu cela:



    In Objective-C, a selector's signature consists of:
    1. The name of the method (in this case it would be 'myTest') (required)
    2. A ':' (colon) following the method name if the method has an input.
    3. A name and ':' for every additional input.


    Selectors have no knowledge of:
    1. The input types
    2. The method's return type.


    Here's a class implementation where performMethodsViaSelectors method performs the other class methods by way of selectors:


    <br />
    			    @implementation ClassForSelectors<br />
    			    - (void) fooNoInputs {<br />
    				    NSLog(@&quot;Does nothing&quot;);<br />
    			    }<br />
    			    - (void) fooOneIput:(NSString*) first {<br />
    				    NSLog(@&quot;Logs %@&quot;, first);<br />
    			    }<br />
    			    - (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second {<br />
    				    NSLog(@&quot;Logs %@ then %@&quot;, first, second);<br />
    			    }<br />
    			    - (void) performMethodsViaSelectors {<br />
    				    self performSelector:@selector(fooNoInputs);<br />
    				    self performSelector:@selector(fooOneInput:) withObject:@&quot;first&quot;];<br />
    				    [self performSelector:@selector(fooFirstInput:secondInput:) withObject:@&quot;first&quot; withObject:@&quot;second&quot;];<br />
    			    }<br />
    			    @end			   <br />
    <br />
    
  • CeetixCeetix Membre
    mai 2012 modifié #8
    Oui ou sinon tu n'utilises qu'un "withObject" et tu lui passes un dictionnaire de n objets si tu as n paramètres pour ta méthode (avec n > 1).
  • 'Ceetix' a écrit:


    Oui ou sinon tu n'utilise qu'un "withObject" et tu lui passes un dictionnaire de n objets si tu as n paramètres pour ta méthode (avec n > 1).




    Ok, bon a savoir..



    Merci
  • AliGatorAliGator Membre, Modérateur
    Ou si tu veux vraiment aller plus loin, tu utilises NSInvocation (où là  tu peux personnaliser toute l'invocation, avec le nombre de paramètres qui vont bien même s'il y en a plus de 2, etc).



    (D'ailleurs "performSelector:", "performSelector:withObject:" et "performSelector:withObject:withObject:" sont des méthodes de commodités qui utilisent NSInvocation sous le capot)
Connectez-vous ou Inscrivez-vous pour répondre.