Passer plusieurs arguments dans un performSelector:withObject:afterDelay ?

apocaalypsoapocaalypso Membre
15:49 modifié dans API UIKit #1
Bonjour,

j'ai un petit problème, j'ai une méthode comportant deux arguments que je voudrais exécuter après x secondes.

Il existe donc :
[self performSelector:@selector(method:) withObject:monObjet afterDelay:2]
mais je ne sais pas comment faire pour faire passer deux arguments :
[self performSelector:@selector(method:with:) withObject:monObjet afterDelay:2]


Comment pourrais-je faire ?

Merci d'avance !

Réponses

  • Philippe49Philippe49 Membre
    15:49 modifié #2
    - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
  • apocaalypsoapocaalypso Membre
    15:49 modifié #3
    Oui, j'ai vu celle-ci mais je n'ai pas le afterDelay non ?
  • zoczoc Membre
    15:49 modifié #4
    Pourquoi ne pas utiliser un timer ?
  • apocaalypsoapocaalypso Membre
    15:49 modifié #5
    Je vais regarder ça merci.
  • Philippe49Philippe49 Membre
    15:49 modifié #6
    un timer, ou bien tu change ta méthode en prenant un seul argument du type nsdictionary par exemple


  • apocaalypsoapocaalypso Membre
    15:49 modifié #7
    J'ai regarder les timer mais je ne vois pas comment introduire deux arguments, je bloque toujours sur le même élément que performSelector, pouvez-vous m'éclairer ?

    Merci beaucoup de vos réponses !
  • Philippe49Philippe49 Membre
    15:49 modifié #8

    Une solution par une méthode relais :

    NSArray * mesDeuxObjects=[....<br />[&nbsp; ... performSelector:@selector(methodeRelais:) withObject:mesDeuxObjects afterDelay: ...]<br />
    

    .....

    -(void) methodeRelais:(NSArray*) array {<br />[ ...&nbsp; doSomethingWithFirstObject:[array objectAtIndex:0] secondObject:[array objectAtIndex:1]];<br /><br />-(....)&nbsp; doSomethingWithFirstObject: ... secondObject:...&nbsp; {<br />&nbsp; ...<br /> }
    
  • Philippe49Philippe49 Membre
    15:49 modifié #9
    Pour l'utilisation d'un timer, c'est la méthode appelée par le timer qui joue le rôle de méthode relais, et le user info le rôle du NSArray ci-dessus.

    (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

    - (void)timerFireMethod:(NSTimer*)theTimer {
        .....  =[theTimer userInfo];
    }

  • remoozremooz Membre
    15:49 modifié #10
    Je profite de ce topic pour poser un petite question annexe.

    Est-ce que le afterDelay est bloquant ?
  • AliGatorAliGator Membre, Modérateur
    juin 2009 modifié #11
    dans 1243926414:
    Est-ce que le afterDelay est bloquant ?
    Eh bien non ce n'est pas bloquant, puisque comme dit dans la doc, la méthode performSelector:withObject:afterDelay: configure en interne un timer qui ne va lancer cette méthode que plus tard. Donc c'est asynchrone.
  • apocaalypsoapocaalypso Membre
    15:49 modifié #12
    Merci beaucoup, j'avais déjà  penser à  la solution du NSArray mais je n'étais pas sûr.

    Merci à  tout le monde !
  • schlumschlum Membre
    15:49 modifié #13
    Ben oui... NSArray ou NSDictionary... C'est fait entre autres pour ça  ???
    Ou alors créer un objet qui a les 2 objets en variable d'instance.
Connectez-vous ou Inscrivez-vous pour répondre.