Passer une Structure a un NSArray et vice versa

Bonjour,

Je débute un peu avec objectiveC et je bloque sur une conversion.

Je souhaiterai récupérer une structure que j'ai passé dans un NSArray.



Pour passer la structure dans le NSArray je fais ceci :





// definition de la structure

typedef struct{

double valueA;

double valueB;

double valueC;

}TestStructure;



//creation d'une variable du nouveau type

TestStructure myStructure;



//definition des variables

myStructure.valueA =1.0;

myStructure.valueB =1.0;

myStructure.valueC =1.0;





//Copie de la structure dans un NSData

NSData *myNSData = [NSData dataWithBytes:&myStructure length:sizeof(TestStructure)];



//Creation d'un NSArray

NSArray * myOutput;



//Passage de la structure dans le NSArray

myOutput =[NSArray arrayWithObject:myNSData];





Ce principe fonctionne bien mais je bloque pour extraire la structure

du NSArray et récupérer les valeurs, ou plutôt transformer le NSData contenu en structure...





Merci pour votre aide !

Réponses

  • Le mieux est de faire une sorte de méthode en C (ou objective-C comme tu veux) qui converti ta structure en NSString, et vice-versa. C'est ce que propose Apple pour, notamment, CGRect, NSRect, CGSize, NSSize, ..
  • Les NSArray n'acceptent pas des types de base (float, int) mais des NSNumber. Peut-être une méthode de type :

    [monArray addObject:[NSNumber numberWithFloat:maStructure->maValeur]];



    ??
  • mpergandmpergand Membre
    février 2012 modifié #4
    <br />
    myNSData=[myOutput objectAtIndex:0];<br />
    TestStructure myStructure2=*(TestStructure*)[myNSData bytes];<br />
    






    Utiliser des structures C en Obj-C c'est pas terrible ...

    Toujours utiliser NSArray et NSDictionary, ou un objet perso pour les données.



    D'autant que sauvegarder des structures C n'est pas portable d'une archi à  l'autre (Intel/PPC, 32bits/64bits)
  • Merci beaucoup pour votre aide !

    la méthode de mpergand fonctionne pour moi.



    myNSData=/color][color=#000000]myOutput objectAtIndex[/color][color=#666600]:[/color][color=#006666]0[/color][color=#666600;

    TestStructure myStructure2=*(TestStructure*)/color][color=#000000]myNSData bytes[/color][color=#666600;



    Effectivement ce type de conversion n'est sans doute pas très optimisé.

    Je code quelques plug-ins pour Quartz composer et je dois échanger un grand nombre de vertex entre ces patches, C'est très lent en utilisant des NSDictionary, C'est pour celà  que je suis en train de tester avec des NSArray de structures...
Connectez-vous ou Inscrivez-vous pour répondre.