2011-09-20 43 views
0

我有下面的代碼,我認爲將足夠聰明,用for語句填充NSMutableArray與NSNumbers。我想實現的是傳遞一個像32這樣的數字的方法,然後讓它返回一個從1到32的數字數組,我可以在我的選擇器中顯示數字。以下是我有:如何使用for語句在目標C中用NSNumbers填充數組?

+(NSMutableArray *) getFeetDownArray:(NSInteger)i{ 

NSMutableArray *feetDownArray = [[NSMutableArray alloc]initWithObjects:nil]; 



for (NSInteger Int=1;Int<=i;Int++) 
{ 
    NSNumber *myNumber = [NSNumber alloc]; 
    [myNumber initWithInt:Int]; 
    [feetDownArray addObject:myNumber]; 
    [myNumber release]; 



} 

return feetDownArray; 

}

現在,當我打電話[MyClass的getFeetDownArray:32],並將其分配到一個數組,我希望收到[myArray的數]返回33作爲計數,但我什麼都沒有。任何人都可以看到我在這裏做錯了嗎?當我聲明* feetDownArray時,我也嘗試在initWithObjects的末尾刪除nil,但它仍然不起作用。我在xcode中也沒有遇到任何錯誤,只是沒有返回數組的數量,我沒有任何項目可以顯示在我的選擇器中。

+3

不要割斷你的'+ alloc'和'-init'消息。這不會解決你所看到的問題,但是不要這樣做。 :) –

+2

另一件事,'返回[feetDownArray autorelease]'。如果你想保持它比本地範圍更長,那麼將它保留在調用者中。根據調用getFeetDownArray的方式,您的代碼可能是正確的,但約定是大多數函數不會將返回值的所有權傳遞給調用者。 – morningstar

+3

是的,不要用像「Int」這樣的關鍵字來命名變量,爲你的局部變量選擇另一個名字。而且,不要使用Titlecase命名變量,而應使用camelCase(第一個字母爲小寫)。請參閱可可命名約定 – AliSoftware

回答

2

我不太清楚,當你調用會發生什麼「initWithObjects:無」,這可能是一個問題。我會這樣做:

+(NSMutableArray *) getFeetDownArray:(NSInteger)size 
{ 
    NSMutableArray *feetDownArray = [[NSMutableArray alloc] initWithCapacity:size]; 

    for (int j=1; j<=size; j++) {  
     NSNumber *myNumber = [NSNumber numberWithInt:j]; 
     [feetDownArray addObject:myNumber]; 
    } 
    return [feetDownArray autorelease]; 
} 
+0

感謝您使用此代碼段。這是一種新的方式來做我想要達到的目標,但是我最後得到了和以前一樣的結果,沒有任何錯誤。我將發佈我在viewDidLoad和picker方法中使用的代碼,因爲也許我在那裏犯了一個錯誤,而不是上面的錯誤?可能都是,我不確定。 – MeisterPlans

0

確保autorelease你的數組。你也可以傳遞一個整數,並有方法做所有的NSNumber翻譯,以進一步封裝代碼:

+ (NSMutableArray *) getFeetDownArray: (int) arraySize 
{ 
    NSMutableArray *feetDownArray = [[NSMutableArray alloc] init]; 

    for (int currentNumber = 1; currentNumber <= arraySize; currentNumber++) 
    { 
     NSNumber *number = [NSNumber numberWithInt: currentNumber]; 
     [feetDownArray addObject: number]; 
    } 

    return [feetDownArray autorelease]; 
} 
+0

你可能想檢查這段代碼,因爲雖然其他建議並沒有給我我正在尋找的東西,但它們並沒有產生像這樣的錯誤。謝謝你的建議。 – MeisterPlans

+0

那麼我有一個保留在那裏是不需要的,我沒有Xcode在我面前嘗試它,並錯過了。但是,即使保留,代碼編譯和運行良好。它根據傳入類方法的參數添加了一個包含所有需要的數字的數組。代碼使用的是什麼版本的Xcode,即使更新,也沒有錯誤發生。 – 5StringRyan

+0

嗨漢斯,我正在使用Xcode 4.0.2 Build 4A2002a。不幸的是,我在其他地方犯了一個錯誤,並且發現我的原始代碼還沒有完成,因爲我現在添加了一些最好的編碼實踐作品。我確信這段代碼也沒問題,但是當我試圖在沒有任何可辨別的錯誤消息的情況下嘗試運行它時,它確實崩潰了。再次感謝您的幫助。 – MeisterPlans