如何保存评级控制值?

How to save a rating control value?

我正在玩弄 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

感谢所有抽出时间的人!

您在以下位置获得 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. 更新 self.rateView(将其添加到 setUpEditableRateView 的末尾):rateView.rate = [[NSUserDefaults standardUserDefaults] integerForKey:@"rating"]

您正在尝试将 NSNumber 保存为 NSInteger。你应该做 [[NSUserDefaults standardUserDefaults] setInteger:[rate integerValue] forKey:@"rating"]; 或使用 - setObject:forKey: 因为 NSNumber 是一个对象,而不是标量。