NSvalue NSMutableArray

ancrouancrou Membre
15:48 modifié dans API AppKit #1
Bonjour,
Je pensais avoir résolu mon problème et bien non  :'(

Ca compile sans warning. et à  l'exécution crash.

l'erreur:
*** -[NSPlaceholderValue value:withObjCType:]: selector not recognized [self = 0x131c0c0]


Mon code :

i
nt loop =0;<br />UI16_ marqueur;<br />NSMutableArray* listLength = [[[NSMutableArray alloc] init] autorelease];<br />while(loop&lt;nbrLeads){<br />	[data getBytes:&amp;marqueur range:NSMakeRange(index, 2)];<br />	index += 2;<br />	marqueur=NSSwapLittleShortToHost(marqueur);<br />	NSValue *taille = [[[NSValue alloc] value:&amp;marqueur withObjCType: @encode(UI16_)]autorelease];<br />	[listLength addObject:taille]; //ligne de plantage !!!!!!<br /> 	loop++;<br />	}<br />int end =[[listLength objectAtIndex:loop] intValue];


un problème d'allocation ? un problème de gros débutant ou de gros débile  :'(

Réponses

  • Philippe49Philippe49 Membre
    15:48 modifié #2
    Ne serait-ce pas le refus d'une NSMutableArray de faire
      [aMutableArray addObject:nil];


    Autrement dit, fait un test if(taille==nil) NSLog(@c'est cela qui coince);

  • Philippe49Philippe49 Membre
    15:48 modifié #3
    D'autre part, la méthode que tu utilises
    + (NSValue *)value:(const void *)value withObjCType:(const char *)type

    est une méthode de classe qui renvoies un objet qui est déjà  en autorelease. Elle s'utilise ainsi :

    NSValue * taille = [NSValue value:&marqueur withObjCType: @encode(UI16_)];
  • ancrouancrou Membre
    avril 2008 modifié #4
    Comme ça ne marché pas je bidouille est j'ai agravé le truc  B)

    Donc dans la boucle while, c'est résolu, merci. Pas de Alloc, ni autorelease ...

    Mais c'est quand je veux lire la valeur dans mon NSMutableArray que ça merde

    NSLog(@&quot;debut&quot;);<br />int end =[[listLength objectAtIndex:1] intValue];<br />NSLog(@&quot;%d&quot;,end);
    


    erreur:
    debut
    *** -[NSConcreteValue intValue]: selector not recognized [self = 0x61b1560]
    Exception raised during posting of notification.  Ignored.  exception: *** -[NSConcreteValue intValue]: selector not recognized [self = 0x61b1560]

  • Philippe49Philippe49 Membre
    15:48 modifié #5
    Comme tu as utilisé un type inhabituel avec @encode(), il faut utiliser getValue pour lire la valeur
    Essaye ainsi :

    unsigned short end;                                  // ce qui correspond à  UI16_
    [[listLength objectAtIndex:0]  getValue:&end];
    NSLog(@%hu,end);                                    // le format d'un unsigned short c'est %hu
  • ancrouancrou Membre
    15:48 modifié #7
    Gagné :p
    C'était ça
    Merci beaucoup.

    Je me noie vite dans toutes ces classes (Object) Cocoa ... (J'ai une formation d'origine Java  :))
  • Philippe49Philippe49 Membre
    15:48 modifié #8
    dans 1208960327:

    Je me noie vite dans toutes ces classes (Object) Cocoa ... (J'ai une formation d'origine Java  :))


    Bon .. rentrez quand même  :)

    Ceci dit, ici c'est plutôt du C pur et simple qui était en cause
Connectez-vous ou Inscrivez-vous pour répondre.