2009-05-22 5 views
128

J'ai environ 50 objets CGPoint qui décrivent quelque chose comme un "chemin", et je veux les ajouter à un NSArray. Ce sera une méthode qui retournera juste le CGPoint correspondant pour un index donné. Je ne veux pas créer 50 variables comme p1 = ...; p2 = ..., et ainsi de suite. Existe-t-il un moyen simple de me permettre de définir ces points "instantanément" lors de l'initialisation du NSArray avec des objets?Comment ajouter facilement des objets CGPoint à un NSArray?

Répondre

317

Avec UIKit Apple a ajouté le soutien pour CGPoint à NSValue, de sorte que vous pouvez faire:

NSArray *points = [NSArray arrayWithObjects: 
        [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)], 
        [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)], 
        nil]; 

Liste autant de [NSValue] les instances que vous avez CGPoint, et mettre fin à la liste nulle. Tous les objets de cette structure sont automatiquement libérés.

D'un autre côté, quand vous tirez les valeurs hors du tableau:

NSValue *val = [points objectAtIndex:0]; 
CGPoint p = [val CGPointValue]; 
+0

Cool. Comment cela fonctionnerait-il pour n'importe quel type de type scalaire? – Thanks

+2

Pour les types scalaires, jetez un oeil à NSNumber ... vous verrez des constructeurs comme numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, etc. –

+4

Vous pouvez également utiliser NSValue directement: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] par exemple. –

2

Avez-vous pris un coup d'oeil à CFMutableArray? Cela pourrait mieux fonctionner pour vous.

7

J'utilise ceci:

Créer tableau:

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]]; 

Obtenir 1er objet CGPoint:

CGPoint myPoint = [myArray[0] CGPointValue]; 
2

Vous pouvez également écrire cette manière standard C/C++:

CGPoint oldschool[] = { CGPointMake(5.5, 6.6), 
         CGPointMake(7.7, 8.8) }; 

CGPoint p2 = oldschool[1];