0

私は実際にplist内にユーザー設定を保存して、どこからでもアクセスできるようにしようとしています。しかし、UISliderの値を配列に保存すると、常にメッセージが表示されます

互換性のないタイプ'id'のパラメーターに'float'を送信します。

アレイは次のようになります。

NSArray *value = [[NSArray alloc] initWithObjects: [theGradeSlider value], [theBackgroundSound isOn], [theButtonSound isOn], nil];

私もMSMutableArrayで試しましたが、これも機能しません。


別の解決策

NSUserDefaultsでそれを知ってみましたが、うまくいきました。

設定を保存するには(viewDidUnloadまたはviewDidDiassappearに挿入する必要があります):

NSUserDefaults *settings = [[NSUserDefaults alloc] initWithUser:@"User"];

[settings setFloat:theGradeSlider.value forKey:@"theGradeSlider"];
[settings setBool:theBackgroundSound.on forKey:@"theBackgroundSound"];
[settings setBool:theButtonSound.on forKey:@"theButtonSound"];
[settings synchronize];

設定をロードするには(viewDidLoadまたはViewDidAppearに挿入する必要があります):

NSUserDefaults *settings = [[NSUserDefaults alloc] initWithUser:@"User"];

theGradeSlider.value = [settings floatForKey:@"theGradeSlider"];
theBackgroundSound.on = [settings boolForKey:@"theBackgroundSound"];
theButtonSound.on = [settings boolForKey:@"theButtonSound"];
4

3 に答える 3

2

ここでの問題は、配列に入力する値がオブジェクトではないことです。これを行うには(配列ではなく辞書をお勧めしますが)、NSNumberそれぞれにオブジェクトを作成する必要があります。

NSNumber *sliderValueObj = [NSNumber numberWithFloat: [theGradeSlader value]];
NSNumber *backgroundSoundObj = [NSNumber numberWithBool: [theBackgroundSound isOn]];
NSNumber *buttonSoundObj = [NSNumber numberWithBool: [theButtonSound isOn]];

NSArray *value = [[NSArray alloc] initWithObjects: sliderValueObj,backgroundSoundObj,buttonSoundObj, nil];

また

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: sliderValueObj, @"slider",
                      backgroundSoundObj, @"backgroundSound",
                      buttonSoundObj, @"buttonSound",
                      nil];

より良い形のために、キーの内容を使用してください。

于 2012-06-07T21:32:34.573 に答える
0

これは真実です。プリミティブを配列に格納することはできません。NSNumberのように保存したほうがよいでしょうNSUserDefaults。それが目的です。

于 2012-06-07T21:55:10.940 に答える
0

クラスを使用してNSNumber、値を配列に格納する必要があります。特にメソッドはと-numberWithFloat:です-numberWithBool

NSArray *value = [[NSArray alloc] 
         initWithObjects:[NSNumber numberWithFloat:[theGradeSlider value]], 
                         [NSNumber numberWithBool:[theBackgroundSound isOn]], 
                         [NSNumber numberWithBool:[theButtonSound isOn]], nil];
于 2012-06-07T21:58:30.933 に答える