2015-07-27 3 views
0

Я играю с DYRateView .... элемент управления в конце длинного списка элементов управления, которые я опробовал. Это можно найти здесь: https://github.com/dyang/DYRateViewКак сохранить значение контроля рейтинга?

Проблема со всеми элементами управления, которые я пробовал, заключается в том, что я не могу сохранить рейтинг после его изменения. Я использую NSUserDefaults и пытаюсь разместить его в разных местах, в том числе там, где значение изменяется, когда представление настроено, в viewDidLoad, в viewWillAppear, внутри самого исходного кода. Сохранение этого значения просто меня смущает. Буду признателен за любую помощь. Просто чтобы понять, как это должно работать, я только что работал над образцом кода, который поставляется с DYRateView. Вот соответствующий код:

THE .M FILE 

#import "DemoViewController.h" 

@interface DemoViewController() 

- (void)setUpEditableRateView; 

@end 

@implementation DemoViewController 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSUserDefaults standardUserDefaults] integerForKey:@"rating"]; 

    [self setUpEditableRateView]; 
} 

- (void)setUpEditableRateView { 
    DYRateView *rateView = [[DYRateView alloc] initWithFrame:CGRectMake(0, 40, self.view.bounds.size.width, 20) fullStar:[UIImage imageNamed:@"StarFullLarge.png"] emptyStar:[UIImage imageNamed:@"StarEmptyLarge.png"]]; 
    rateView.padding = 20; 
    rateView.alignment = RateViewAlignmentCenter; 
    rateView.editable = YES; 
    rateView.delegate = self; 
    [self.view addSubview:rateView]; 
    [rateView release]; 
} 

- (void)rateView:(DYRateView *)rateView changedToNewRate:(NSNumber *)rate { 
    self.rateLabel.text = [NSString stringWithFormat:@"Rate: %d", rate.intValue]; 

    [[NSUserDefaults standardUserDefaults] setInteger:rate forKey:@"rating"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

@end 

Спасибо всем, кто не торопится!

ответ

1

Вы пытаетесь сохранить a NSNumber как NSInteger. Вы должны сделать [[NSUserDefaults standardUserDefaults] setInteger:[rate integerValue] forKey:@"rating"]; или использовать - setObject:forKey:, потому что NSNumber - это объект, а не скаляр.

+0

Работал как шарм. Спасибо! – IWannaLearn

0

Вы получаете rating valuea по адресу: [[NSUserDefaults standardUserDefaults] integerForKey:@"rating"];, но что вы делаете с этим значением?

Я думаю, что вам нужно получить это значение и установить DYRateView. Итак:

  1. Создать свойство DYRateView: @property DYRateView * rateView
  2. установить его на setUpEditableRateView: self.rateView = [[DYRateView alloc] initWithFrame:CGRectMake(0, 40, self.view.bounds.size.width, 20) fullStar:[UIImage imageNamed:@"StarFullLarge.png"] emptyStar:[UIImage imageNamed:@"StarEmptyLarge.png"]];
  3. Update self.rateView (добавьте его в конец setUpEditableRateView): rateView.rate = [[NSUserDefaults standardUserDefaults] integerForKey:@"rating"]
+0

Благодарим вас за ответ. Я сделал то, что вы предложили, и случилось смешное ... мой взгляд не загружается. Я просто получаю черный экран. Похоже, он должен сработать. Я также попытался вспомнить умолчание в viewDidLoad, и это тоже не сработало. Любые идеи о том, что может помешать просмотру контроллера? – IWannaLearn

+0

Если вы получаете черный экран, возможно, у вас есть другая проблема. – Klevison

+0

Благодарим вас за то, что вы позвонили мне по умолчанию со свойством. Это была моя первая ошибка. – IWannaLearn

Смежные вопросы