Ios NSUserDefaults设置页面未保存

Ios NSUserDefaults设置页面未保存,ios,nsuserdefaults,uislider,Ios,Nsuserdefaults,Uislider,我想创建一个设置页面,在其中设置/获取NSUserDefaults的滑块值(文本大小),但我的应用程序没有。我没有收到任何错误,只是不想保存。我已经对代码进行了注释,以帮助您更好地理解我想要做的事情,但它非常简单。我有一个7阶段的滑块,它有字体大小,你可以简单地滑动它来确定你想要的字体大小-这是我希望在整个应用程序中保存的值。但每当我按下导航栏上的返回键并再次打开“设置”页面时,默认大小始终为22 h m @接口设置可视控制器(){ NSArray*编号; nsmutableAttributeS

我想创建一个设置页面,在其中设置/获取NSUserDefaults的滑块值(文本大小),但我的应用程序没有。我没有收到任何错误,只是不想保存。我已经对代码进行了注释,以帮助您更好地理解我想要做的事情,但它非常简单。我有一个7阶段的滑块,它有字体大小,你可以简单地滑动它来确定你想要的字体大小-这是我希望在整个应用程序中保存的值。但每当我按下导航栏上的返回键并再次打开“设置”页面时,默认大小始终为22

h

m

@接口设置可视控制器(){
NSArray*编号;
nsmutableAttributeString*sampleTextString;
int-fontSize;
NSUserDefaults*默认值;
}
@结束
@实现设置可视控制器
-(无效)viewDidLoad{
[超级视图下载];
self.navigationItem.title=@“设置”;
数字=@[@(10),@(12),@(14),@(16),@(18),@(20),@(22)];//文本大小,这些数字值表示每个滑块位置
NSInteger numberOfSteps=((float)[numbers count]-1);//滑块值从0到数字数组中的值数
self.sizeSlider.maximumValue=numberOfSteps;//当滑块移动时,它将不断调用-valueChanged:
self.sizeSlider.minimumValue=0;
默认值=[NSUserDefaults standardUserDefaults];//将字体设置为保存在系统中的当前字体
long textsize=[默认的integerworkey:@“fontSize”];
NSLog(@“textsize:%ld”,textsize);
self.sizeSlider.value=textsize;//将滑块设置为之前设置的任何字体
self.sizeSlider.continuous=YES;//NO使其仅在释放后调用
[self.sizeSlider addTarget:self action:@selector(valueChanged:)for controlEvents:UIControlEventValueChanged];
sampleTextString=[[NSMutableAttributedString alloc]initWithString:@“敏捷的棕色狐狸跳过了懒狗!”;
self.sampleText.AttributeText=sampleTextString;
[sampleTextString addAttribute:NSFontAttributeName值:[UIFont systemFontOfSize:textsize]范围:NSMakeRange(0,sampleTextString.length)];
}
-(无效)值已更改:(UISlider*)发送方{
NSUInteger index=(NSUInteger)(self.sizeSlider.value+0.5);//将滑块位置四舍五入到数字数组的最近索引
[self.sizeSlider设置值:索引动画:否];

NSNumber*number=numbers[index];//答案来自rmaddy-谢谢

我需要查看索引,而不是数组的实际值

NSInteger indexText = [numbers indexOfObject:[NSNumber numberWithInteger:textsize]];

所以我把它放进去了,它返回了我想要的滑块位置的索引。

保存值的代码保存了点大小,但加载值的代码试图将滑块的索引设置为保存的字体大小。这不一致,需要修复。我编辑了代码以显示字体大小的更改。您错过了我的要点。
 viewDidLoad
您调用
self.sizeSlider.value=textsize;
。但是滑块的值不是文本大小,而是大小数组中的索引。我明白了,那么我如何将滑块索引与字体大小相对应?我是否需要创建一个数组来查找字体大小是哪个索引?只需获取
num中的数字索引即可BER
阵列。
@interface SettingsViewController () {
    NSArray *numbers;
    NSMutableAttributedString *sampleTextString;
    int fontSize;
    NSUserDefaults *defaults;
}

@end

@implementation SettingsViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = @"Settings";

    numbers = @[@(10), @(12), @(14), @(16), @(18), @(20), @(22)];                 // Text Sizes, these number values represent each slider position
    NSInteger numberOfSteps = ((float)[numbers count]-1);                           // Slider values go from 0 to the number of values in your numbers array

    self.sizeSlider.maximumValue = numberOfSteps;                                   // As the slider moves it will continously call the -valueChanged:
    self.sizeSlider.minimumValue = 0;


    defaults = [NSUserDefaults standardUserDefaults];                                //Setting the font to be the current font saved in the system
    long textsize = [defaults integerForKey:@"fontSize"];
    NSLog(@"textsize: %ld", textsize);
    self.sizeSlider.value = textsize;                                               // Set the Slider to whatever font you had set it previously



    self.sizeSlider.continuous = YES;                                               // NO makes it call only once you let go
    [self.sizeSlider addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];

    sampleTextString = [[NSMutableAttributedString alloc] initWithString:@"The Quick Brown Fox Jumps Over The Lazy Dog!"];
    self.sampleText.attributedText = sampleTextString;

    [sampleTextString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:textsize] range:NSMakeRange(0, sampleTextString.length)];

}


-(void)valueChanged:(UISlider *)sender{
    NSUInteger index = (NSUInteger)(self.sizeSlider.value + 0.5);       // round the slider position to the nearest index of the numbers array
    [self.sizeSlider setValue:index animated:NO];


    NSNumber *number = numbers[index];                                  // <-- This numeric value you want
    [sampleTextString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:[number floatValue]] range:NSMakeRange(0, sampleTextString.length)];

    [defaults setInteger:[number integerValue] forKey:@"fontSize"];         // Saving fontSize to NSUserDefaults
    [defaults synchronize];

    self.sampleText.attributedText = sampleTextString;
}
@end
NSInteger indexText = [numbers indexOfObject:[NSNumber numberWithInteger:textsize]];