2009-05-22 7 views
128

Ho circa 50 oggetti CGPoint che descrivono qualcosa come un "percorso" e voglio aggiungerli a un NSArray. Sarà un metodo che restituirà il CGPoint corrispondente per un dato indice. Non voglio creare 50 variabili come p1 = ...; p2 = ..., e così via. C'è un modo semplice che mi permetterebbe di definire quei punti "istantaneamente" quando si inizializza l'NSArray con gli oggetti?Come posso aggiungere oggetti CGPoint a un NSArray nel modo più semplice?

risposta

317

Con UIKit Apple ha aggiunto il supporto per CGPoint a NSValue, in modo da poter fare:

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

lista come molti [NSValue] casi come avete CGPoint, e alla fine la lista di zero. Tutti gli oggetti in questa struttura sono auto-rilasciati.

D'altra parte, quando si sta tirando fuori i valori della matrice:

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

Freddo. Come funzionerebbe per qualsiasi tipo di scalare? – Thanks

+2

Per i tipi scalari, uno sguardo alla NSNumber ... vedrai costruttori come numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, ecc –

+4

In alternativa è possibile utilizzare direttamente NSValue: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] per esempio. –

2

Avete dato un'occhiata a CFMutableArray? Potrebbe funzionare meglio per te.

7

Io uso questo:

Creare array:

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

Get 1 ° oggetto CGPoint:

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

Si può anche scrivere questo in uno standard C/C++ modo:

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

CGPoint p2 = oldschool[1]; 
Problemi correlati