0

スライダー(たとえば、0から4までの値)と、現在のスライダー値を表示しないが、それに応じた文字列をコンテンツに表示する対応するラベルが欲しいのですが。

私は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はコンパイルできますが、スライダーを動かそうとするとすぐにクラッシュします。

4

2 に答える 2

0

NSString問題は、変数への割り当てですmood

フォーマット文字列を使用する場合は、NSStringクラス メソッドを使用する必要がありstringWithFormat:ます。

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

また

mood = [sliderArray objectAtIndex:sliderValue]; 

また、スライダーの値が実際に を返すことを確認する必要がありますNSInteger。スライダーのvalueプロパティの通常の型は ですfloat。したがって:

NSInteger sliderValue = (NSInteger) slider.value; 
于 2012-06-17T16:58:36.403 に答える
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"
}

その場合、上記のコードを次のように変更します。

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

もちろん、スライドの値が気分配列の境界を超えないように注意する必要があります。

于 2012-06-17T16:33:31.003 に答える