2009-04-17 23 views
1

我試圖找回致電-getIndexes:maxCount:indexRange分配一個NSUInteger IndexBuffer

NSIndexSet這裏是我的代碼

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

然而,在調試器中IndexBuffer總是顯示爲-1。當我用一個像NSUInteger theIndexBuffer[10]這樣的靜態數字初始化它時,我得到了一個正確的實例。

這可能是因爲它不知道編譯時arrayCount是什麼。
這樣做的正確方法是什麼?

回答

2

可以使用這樣的指針動態分配的:

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 

在C,儘管這是一個動態分配的緩衝區,你可以使用數組下標運算符和(大部分)假裝它只是一個數組。所以,如果你想獲得的第三個元素,你可以寫:

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

只是不要忘記釋放它時,你就大功告成了。

1

我不認爲你做錯了什麼。 It's valid in C99.您可以通過查看這是否評估爲真來進行仔細檢查:

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