2011-05-03 66 views
1

我有這樣的方法:如何將數組傳遞給方法,然後確定數組的大小?

+ (NSData *) createWave: (short[])sampleData { 
    int i = [sampleData count]; // Warning: Invalid receiver type 'short int *' 
} 

在此方法中,我試圖確定有多少元素是samples陣列中傳遞的但我發現了上面的警告(我得到相同警告如果我將samples更改爲short *)。

如何傳遞這樣的數組,然後確定數組的大小?

回答

5

你不能。

要麼確保您的數組中的最後一個元素是獨一無二的,並檢查有無或大小參數傳遞,以及即

+ (NSData *) createWave:(short [])samples size:(size_t)count { 
    int i = count; 
} 

短[]是不是一個對象,所以你不能打電話方法 - 這就是爲什麼你得到一個警告(如果你運行的代碼可能會崩潰!)

+0

您應該爲'count'提供類型,否則它默認爲'id'。 – kennytm 2011-05-03 15:55:08

+0

我還沒有運行它 - 我學會了不要忽視警告。 :) – MusiGenesis 2011-05-03 15:56:18

+0

'+(NSData *)createWave:(short [])samples size:(size_t)count;' – Joe 2011-05-03 15:57:41

3

您正嘗試使用C風格的數組作爲參數,然後將其作爲Objective-C對象進行訪問。 (我假設sampleData和樣本應該是相同的)。用NSNumber代替NSArray,因爲使用C風格的數組需要知道長度。

+ (NSData *) createWave: (NSArray*)sampleData { 
    int i = [sampleData count]; 
} 
+2

是的,這是一個錯字,謝謝。爲了提高性能,我在這裏避免使用'NSArray' - 這是原始音頻數據,可能相當大。 – MusiGenesis 2011-05-03 15:58:17

+0

我明白了,爲此我給了其他答案+1 – Joe 2011-05-03 16:00:48

相關問題