Ползунок ведет себя не так, как я ожидал

У меня есть ползунок, который изменяет значение с плавающей запятой от 1 до 10, но я хочу сохранить это значение и использовать его во всех контроллерах представления, поэтому я сохранил это значение с плавающей запятой как NSNumber в классе модели (settingsData.sensitivitySliderSettingValue).

Я пытаюсь вывести обновленное значение ползунка на консоль каждый раз, когда оно изменяется, однако оно просто устанавливается на 0, а не на 0-10. Я не понимаю, почему это так...

Вот мой код:

-(IBAction)sensitivitySliderValueChanged:(id)sender
{
    [self updateSensitivity];    
}


-(void)updateSensitivity{


    settingsData.sensitivitySettingValue = [NSNumber numberWithFloat:sensitivitySlider.value];

    NSLog(@"The Slider Value is: %1.1f", [settingsData.sensitivitySettingValue floatValue]);

}

person Adam Waite    schedule 21.11.2011    source источник


Ответы (3)


Я реализовал весь ваш код в виде демонстрационного примера, и он работает следующим образом.

//----------------- .m файл

#import "SliderDemoViewController.h"
#import "SettingsData.h"

@implementation SliderDemoViewController


-(IBAction)sensitivitySliderValueChanged:(id)sender
{
    [self updateSensitivity];    
}

-(void)updateSensitivity{

    settingsData.sensitivitySettingValue = [NSNumber numberWithFloat:sensitivitySlider.value];
    NSLog(@"The Slider Value is: %1.1f", [settingsData.sensitivitySettingValue floatValue]);
    NSLog(@"sensitivitySlider.value= %f",sensitivitySlider.value);
    NSLog(@"sensitivitySlider.minimumValue= %f",sensitivitySlider.minimumValue);
    NSLog(@"sensitivitySlider.maximumValue= %f",sensitivitySlider.maximumValue);
}
@end

//----------.h файл

#import <UIKit/UIKit.h>
@class SettingsData;
@interface SliderDemoViewController : UIViewController {
    IBOutlet    UISlider*   sensitivitySlider;
    SettingsData* settingsData;
}
-(IBAction)sensitivitySliderValueChanged:(id)sender;
@end

Здесь SettingsData — это класс модели данных, объявленный как

//-----------

@interface SettingsData : NSObject {
    NSNumber* sensitivitySettingValue;
}

@property (nonatomic, retain) NSNumber *sensitivitySettingValue;
@end

Теперь вывод updateSensitivity будет примерно таким

2011-11-22 09:59:57.259 SliderDemo[691:207] The Slider Value is: 0.0
2011-11-22 09:59:57.260 SliderDemo[691:207] sensitivitySlider.value= 5.581448
2011-11-22 09:59:57.261 SliderDemo[691:207] sensitivitySlider.minimumValue= 1.000000
2011-11-22 09:59:57.261 SliderDemo[691:207] sensitivitySlider.maximumValue= 10.000000

Если вы посмотрите на первую строку логов, всегда будет выводиться 0,00, потому что у нас нигде не размещен объект settingsData.

Единственный момент, который я считаю возможно, вы делаете что-то не так, это то, что вы не создаете этот объект, поскольку

if(!settingsData)
{
   settingsData = [[SettingsData alloc]init];
}

если вы не выделяете этот объект, вы всегда будете получать 0 в качестве значения с плавающей запятой при выполнении NSLog для значения его свойства чувствительностиSettingValue. Если вы где-то разместили этот объект, убедитесь, что вы выделили его задолго до того, как попытаетесь установить или получить значение любой из его переменных-членов.

person Rahul Sharma    schedule 22.11.2011

Записали ли вы NSLog необработанное значение чувствительностиSlider.value, чтобы убедиться, что сам ползунок настроен правильно?

person Samuli Viitasaari    schedule 21.11.2011
comment
Затем я бы NSLog результат numberWithFloat:sensitivitySlider.value перед тем, как назначать его какой-либо переменной, и если это также правильно, то проблема, похоже, заключается в свойстве settingsData class/sensitivitySettingValue или настройке переменной... - person Samuli Viitasaari; 21.11.2011

убедитесь, что минимальное значение и maximumValue ползунка настроены правильно

и проверьте, что NSLog %1.1f мне кажется странным. попробуйте %f

для получения дополнительных сведений об устранении неполадок, пожалуйста, опубликуйте вывод этого:

NSLog(@"sensitivitySlider.value= %f",sensitivitySlider.value)
NSLog(@"sensitivitySlider.minimumValue= %f",sensitivitySlider.minimumValue)
NSLog(@"sensitivitySlider.maximumValue= %f",sensitivitySlider.maximumValue)
person JeanLuc    schedule 21.11.2011