NSUserDefaults Settings Page Not Saving
Я хотел бы создать страницу настроек, где она устанавливает / получает значение ползунка (Размер текста) из NSUserDefaults, но мое приложение не имеет ничего из этого. Я не получаю никаких ошибок, просто не хочу сохранять. Я прокомментировал код, чтобы помочь вам лучше понять, что я хочу сделать, но это довольно просто. У меня есть 7-этапный слайдер с размерами шрифта, и вы можете просто сдвинуть его, чтобы определить, какой размер шрифта вы хотите - это значение, которое я хочу сохранить во всем приложении. Но всякий раз, когда я нажимаю обратно на панели навигации и снова открываю страницу настроек, размер по умолчанию всегда равен 22.
.час
@interface SettingsViewController : UIViewController
@property (strong, nonatomic) IBOutlet UISlider *sizeSlider;
@property (strong, nonatomic) IBOutlet UILabel *sampleText;
@end
.m
@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
1 ответ
Ответ приходит от rmaddy - Спасибо!
Мне нужно было посмотреть на индекс, а не на фактическое значение массива.
NSInteger indexText = [numbers indexOfObject:[NSNumber numberWithInteger:textsize]];
Таким образом, я вставил это, и это вернуло индекс положения ползунка, который я хотел.