2010-08-27 9 views

Répondre

12

Je recommande le stockage des points dans un NSArray, compactés en utilisant NSValue:

NSMutableArray *arrayOfPoints = [[NSMutableArray alloc] init]; 

[arrayOfPoints addObject:[NSValue valueWithCGPoint:image.center]]; 

// Do something with the array 
[arrayOfPoints release]; 

Cela suppose que image.center est un struct CGPoint (sinon, vous pouvez faire un à l'aide CGPointMake()).

Pour extraire le CGPoint, utilisez simplement

[[arrayOfPoints objectAtIndex:0] CGPointValue]; 
1

Vous avez raison en ce que pour modifier un tableau, vous devez avoir un type NSMutableArray.

Il est pas très difficile d'utiliser l'un ou l'autre:

NSMutableArray* array = [NSMutableArray arrayWithCapacity:3]; 
[array addObject:firstObject]; 
[array addObject:secondObject]; 
[array addObject:thirdObject]; 
2

Comme Brad Larson a fait remarquer, c'est pour Mac, et non pour iPhone.

Oui, NSMutableArray est la meilleure option. Cependant, les tableaux stockent des objets, et le centre est une structure!

Une solution consiste à envelopper le struct center avec NSValue:

yourArray = [NSMutableArray arrayWithCapacity:2]; //Don't worry, capacity expands automatically 

[yourArray addObject:[NSValue valueWithPoint:image.center]]; 
//later 
[[yourArray objectAtIndex:whatevs] pointValue]; 

(Ceci est très similaire, par exemple, envelopper un int avec NSNumber pour le stockage dans un tableau.)

+2

Notez que '+ valueWithPoint:' et '-pointValue' n'existent pas sur l'iPhone, seulement sur le Mac. Vous pouvez utiliser '+ valueWithCGPoint:' et '-CGPointValue' sur l'iPhone (ce qui l'intéresse, à en juger par les tags), comme je le décris dans ma réponse. –

+0

Merci pour cela; Je ne suis pas un iPhone-er. – andyvn22

2

Vous avez une série d'options pour le faire. La chose à retenir est que les valeurs x et y vont être CGFloats (et image.center un CGPoint). Ce ne sont pas des objets et ne peuvent pas être directement ajoutés à un NSArray.

Vous pouvez utiliser les méthodes valueWithPoint: et pointValue de NSValue. Si vous voulez les sauvegarder indépendamment, vous pouvez utiliser NSNumber en faisant [NSNumber numberWithFloat: x] ;. Ou, si vous le souhaitez, vous pouvez utiliser des tableaux C.

+0

Merci les gars. Il y avait certainement beaucoup d'options disponibles. Merci d'être si utile et d'expliquer avec le code! –

6

tableaux C sont un sous-ensemble de l'objectif C, ainsi que la production d'un code plus rapide et souvent en utilisant moins de mémoire que l'utilisation des classes Cocoa Foundation. Vous pouvez ajouter:

CGPoint myPoints[MAX_NUMBER_OF_POINTS]; 

à vos variables d'instance; et enregistrer les coordonnées avec:

myPoints[i] = image.center; 
+2

+1 si vous utilisez * lots * de points, cela pourrait être le meilleur moyen, car vous n'avez pas entendu parler de créer des tonnes et des tonnes d'objets 'NSValue'. –

Questions connexes