Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS Xcode] IBAction qui freeze mon app

Sujet résolu
    15 février 2013 à 16:25:19

    Salut à tous,

    J'ai un petit soucis avec mon code. Il s'agit d'une application qui envoie du "artnet" qui est un protocole réseau (c'est comme du midi mais pour les éclairages professionels)

    j'ai une IBaction rattachée à un bouton qui doit m'envoyer un message artnet via mon réseau wifi et un slider qui change un paramètre de ce message.

    le signal artnet doit être envoyé en continue dans le réseau wifi mais son contenu doit pouvoir évolué en fonction de la position de mon slider

    mon problème c'est que le code qui suit envoie bien le message artnet avec la valeur de position de mon slider, mais une fois lancée l'IBaction m'empêche de modifier la position de mon slider. Le message est bien envoyer en continue, la position initiale du slider est prise en compte mais je pense que ça boucle et ne aucune autre action n'est possible.

    si une âme charitable pouvait se pencher sur mon problème.

    d'avance, merci

    voici le code : 

    [quote]

    -(IBAction)startartnet

    {

        artnet_node *artnetNode = artnet_new(ip_addr1);

    artnet_set_long_name(artnetNode, "ArtPAD");

    artnet_set_short_name(artnetNode, "AP");

    artnet_set_subnet_addr(artnetNode, subnet_addr) ;

    artnet_set_port_type(artnetNode, 0ARTNET_ENABLE_OUTPUTARTNET_PORT_DMX) ;

       artnet_set_port_addr(artnetNode, 0ARTNET_OUTPUT_PORTport_addr);

    if  (artnet_start(artnetNode) != 0) {

    printf("Error: %s\n"artnet_strerror());

        exit(-1);

    }

    while (YES) {

    artnet_send_poll(artnetNode, NULLARTNET_TTM_DEFAULT);

        int a = 3;

        int b = slider1.value;

        uint8_t dmx[512] = {0};

        dmx[9] = 127;

        dmx[19] = 127;

        dmx[a] = b;

        artnet_send_dmx(artnetNode, 1,  sizeof(dmx), dmx);

    }    

    }

    [/quote]

    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2013 à 18:49:49

      Ce n'est peut être rien mais il te manque un :(id)sender à ta méthode ce qui devrait donner : -(IBAction)startertnet :(id) sender{}

      Sinon ce serait bien de revoir ton While(YES) qui je pense n'est pas une très bonne solution, il faudrait peut-être se tourner vers des thread?

      Je ne connais pas le protocole artnet mais est-ce que tu as essayé de le recréer depuis 0 à chaque itération de ta boucle? Est-ce réalisable d'un point de vu technique? Ça pourrait au moins confirmer que le problème ne vient pas a priori de dessus à moins qu'il y est une option dans l'une des fonctions qui fait que la valeur une fois indiquée ne peut changer.

      -
      Edité par Holosmos 15 février 2013 à 18:50:15

      • Partager sur Facebook
      • Partager sur Twitter
        15 février 2013 à 19:39:28

        j'ai crée un bouton ON avec une fonction timer qui déclenche "-(IBAction)startartnet"et un bouton OFF pour arrêter le timer mais ça tourne toujours en rond

        le pb vient bien du While(YES), mais je n'ai pas d'autre idée

        aucune fonction n'interdit le changement de valeur

        HELP ;-((

        -(IBAction)ok
        {
        timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(startartnet) userInfo:nil repeats:YES];
        }
        -(IBAction)off
        {
            [timer invalidate];
            timer = nil;
        }
        
        
        -(IBAction)startartnet
        
        {
        
            artnet_node *artnetNode = artnet_new(ip_addr, 1);
        
        artnet_set_long_name(artnetNode, "ArtPAD");
        
        artnet_set_short_name(artnetNode, "AP");
        
        artnet_set_subnet_addr(artnetNode, subnet_addr) ;
        
        artnet_set_port_type(artnetNode, 0, ARTNET_ENABLE_OUTPUT, ARTNET_PORT_DMX) ;
        
           artnet_set_port_addr(artnetNode, 0, ARTNET_OUTPUT_PORT, port_addr);
        
        if  (artnet_start(artnetNode) != 0) {
        
        printf("Error: %s\n", artnet_strerror());
        
            exit(-1);
        
        }
        
        while (YES) {
        
        artnet_send_poll(artnetNode, NULL, ARTNET_TTM_DEFAULT);
        
            int a = 3;
        
            int b = slider1.value;
        
            uint8_t dmx[512] = {0};
        
            dmx[9] = 127;
        
            dmx[19] = 127;
        
            dmx[a] = b;
        
            artnet_send_dmx(artnetNode, 1,  sizeof(dmx), dmx);
        
        }    
        
        }
        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2013 à 19:43:01

          Tu as essayé ce que je t'ai recommandé?
          • Partager sur Facebook
          • Partager sur Twitter
            15 février 2013 à 19:47:34

            pour le :(id) sender{}    ça fait planter l'appli

            2013-02-15 19:46:47.332 ArtPAD[769:11303] -[ViewController startartnet]: unrecognized selector sent to instance 0x716d580
            2013-02-15 19:46:47.336 ArtPAD[769:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController startartnet]: unrecognized selector sent to instance 0x716d580'
            *** First throw call stack:
            (0x1c9e012 0x10dbe7e 0x1d294bd 0x1c8dbbc 0x1c8d94e 0x10ef705 0x26920 0x268b8 0xe7671 0xe7bcf 0x227747 0xad9e83 0x1c5d376 0x1c5ce06 0x1c44a82 0x1c43f44 0x1c43e1b 0x1bf87e3 0x1bf8668 0x2365c 0x2492 0x23c5)
            libc++abi.dylib: terminate called throwing an exception
            (lldb) 


            pour essayé de le recréer depuis 0 à chaque itération de ma boucle :  je n'ai pas bien compris la manipe

            ps : je suis gros débutant sous xcode

            merci en tout cas pour l'aide que tu m'apportes

            -
            Edité par jeffadsl 15 février 2013 à 19:49:14

            • Partager sur Facebook
            • Partager sur Twitter
              15 février 2013 à 19:55:52

              Tu as fais un lien entre le storyboard et ton -startartnet, il faut que tu le refasse avec le nouveau nom de la fonction, et sans oublier d'actualiser également le .h

               
              artnet_node *artnetNode = artnet_new(ip_addr, 1);
               
              artnet_set_long_name(artnetNode, "ArtPAD");
               
              artnet_set_short_name(artnetNode, "AP");
               
              artnet_set_subnet_addr(artnetNode, subnet_addr) ;
               
              artnet_set_port_type(artnetNode, 0, ARTNET_ENABLE_OUTPUT, ARTNET_PORT_DMX) ;
               
                 artnet_set_port_addr(artnetNode, 0, ARTNET_OUTPUT_PORT, port_addr);
               
              if  (artnet_start(artnetNode) != 0) {
               
              printf("Error: %s\n", artnet_strerror());
               
                  exit(-1);
               
              }
               
              while (YES) {
               artnet_node *artnetNode = artnet_new(ip_addr, 1);
               
              artnet_set_long_name(artnetNode, "ArtPAD");
               
              artnet_set_short_name(artnetNode, "AP");
               
              artnet_set_subnet_addr(artnetNode, subnet_addr) ;
               
              artnet_set_port_type(artnetNode, 0, ARTNET_ENABLE_OUTPUT, ARTNET_PORT_DMX) ;
               
                 artnet_set_port_addr(artnetNode, 0, ARTNET_OUTPUT_PORT, port_addr);
               
              artnet_send_poll(artnetNode, NULL, ARTNET_TTM_DEFAULT);
               
                  int a = 3;
               
                  int b = slider1.value;
               
                  uint8_t dmx[512] = {0};
               
                  dmx[9] = 127;
               
                  dmx[19] = 127;
               
                  dmx[a] = b;
               
                  artnet_send_dmx(artnetNode, 1,  sizeof(dmx), dmx);
               
              }   

              Voilà ce à quoi je pensais

              • Partager sur Facebook
              • Partager sur Twitter

              [iOS Xcode] IBAction qui freeze mon app

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown