2009-04-17 12 views
1

Je suis en train de récupérer mon NSIndexSet en appelant -getIndexes:maxCount:indexRangeAllouer un NSUInteger IndexBuffer

Voici mon code

const NSUInteger arrayCount = picturesArray.count; 
NSUInteger theIndexBuffer[arrayCount];  
[picturesArray getIndexes:theIndexBuffer maxCount:arrayCount inIndexRange:nil]; 

Cependant, dans le débogueur le IndexBuffer est montrant toujours aussi -1. Quand je l'initialise avec un nombre statique comme NSUInteger theIndexBuffer[10], j'obtiens une instance appropriée.

C'est probablement parce qu'il ne sait pas ce que arrayCount est au moment de la compilation.
Quelle est la bonne façon de faire cela?

Répondre

2

Vous pouvez allouer dynamiquement à l'aide d'un pointeur comme ceci:

NSUInteger *theIndexBuffer = (NSUInteger *)calloc(picturesArray.count, sizeof(NSUInteger)); 
// Use your array however you were going to use it before 
free(theIndexBuffer); // make sure you free the allocation 

En C, même si ce buffer est alloué dynamiquement, vous pouvez utiliser les opérateurs indice de tableau et (pour la plupart) prétendre que c'est juste un tableau. Donc, si vous voulez obtenir le troisième élément, vous pouvez écrire:

NSUInteger thirdElement = theIndexBuffer[2]; // arrays are 0-indexed 

Il suffit de ne pas oublier de le libérer lorsque vous avez terminé.

1

Je ne pense pas que vous ayez fait quelque chose de mal. It's valid in C99. Vous pouvez revérifier en vérifiant si cela est vrai:

sizeof(theIndexBuffer) == arrayCount * sizeof(NSUInteger)