2012-06-17 37 views
0

我想有一個滑塊(可以說從0到4的值)和一個相應的標籤,內容不會顯示當前的滑塊值,但一個相應的字符串。iOS NSSlider從數組中設置標籤(在索引:滑塊值)

我是很新的Objective-C,但這裏是我試過(...並沒有工作;))

首先我做一個數組:

sliderArray = [[NSArray alloc] initWithObjects: 
@"sad" @"not so good" @"average" @"good" @"awesome", nil]; 

然後我定義的動作:

(IBAction)sliderChange:(id)sender { 
    UISlider *slider = (UISlider *) sender; 
    NSString *mood = [[NSString alloc] init]; 
    mood = @"%@", [sliderArray objectAtIndex:(int)[slider value]]; 
    [sliderLabelMood setText:mood]; 
} 

的Xcode可以編譯,但只要我嘗試移動它崩潰的滑塊。

回答

0

問題是您的工作分配到NSString變量mood

如果您使用的格式字符串,你將不得不使用NSString類方法stringWithFormat:因此無論是

mood = [NSString stringWithFormat:@"%@", 
    [sliderArray objectAtIndex:sliderValue]]; 

mood = [sliderArray objectAtIndex:sliderValue]; 

此外,您應該確保滑塊值確實返回NSInteger。滑塊value屬性的正常類型是float。因此:

NSInteger sliderValue = (NSInteger) slider.value; 
+0

非常感謝。作爲一個絕對的初學者,我越來越多地學習。但Stackoverflow似乎是一個完美的學習場所。再次:謝謝! :) – Robbie

0

字符串是不可變的,所以你可以重用引用。使用alloc/init創建一個是多餘的,因爲它在創建後無法更改。同樣,您可以創建不需要顯式內存管理的數組。請注意,內存管理技術隨着iOS5中ARC的到來而改變。

所以,請嘗試以下來創建您的數組。

sliderArray = [NSArray arrayWithObjects:@"sad", @"not so good", @"average", @"good", @"awesome", nil]; 

,然後顯示的心情標籤:

NSInteger index = [slider value]; 
NSString *mood = [sliderArray objectAtIndex:index]; 
[sliderLabelMood setText:mood]; 

您也可以考慮讓你的標籤陣列靜態,因爲它是恆定的,固定長度:

static NSString* moods[] = { 
    @"sad", @"not so good", @"average", @"good", @"awesome" 
} 

在這種情況下你」 d改變上面的代碼:

NSInteger index = [slider value]; 
[sliderLabelMood setText:moods[index]]; 

如果當然,你需要小心幻燈片的價值不超過情緒陣列的界限。

+0

太棒了!非常感謝! – Robbie