加载保存的计数后,如何从正确的位置继续计数?

时间:2013-08-13 01:58:40

标签: objective-c

我是新编码,正在练习并正在制作一个简单的计数器/计数器应用程序。我正在尝试保存并加载该号码,以便用户在关闭应用后可以继续停止。

保存和加载按钮实际上工作得很好......除非我加载保存的号码,然后按下+1或-1按钮,它从0开始,好像它是应用程序的新负载而没有保存的数据。

如何在用户加载保存的号码时这样做,+1和-1按钮可以读取加载的号码?

这是我的+1按钮..但是没有改变它:

-(IBAction)Up:(id)sender; {


    Number = Number + 1;
    Count.text = [NSString stringWithFormat:@"%i", Number];

}

这些是我的保存和加载按钮:

-(IBAction)save {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@(self.number) forKey:@"number"];
    [defaults synchronize];
}
-(IBAction)load {


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@(self.number) forKey:@"number"];
    self.number = [[defaults objectForKey:@"number"] integerValue];

}

这是底部的额外部分:

    - (void)setNumber:(NSInteger)number {
        _number = number;
        self.label.text = [NSString stringWithFormat:@"%i", _number];
        // this part is giving a warning says "writable atomic property 'number' cannot
        // pair a synthesized getter with a user defined setter
    }

最后这是我的.h

int Number;


@interface ViewController : UIViewController


{
    IBOutlet UISwitch *theswitch;
    IBOutlet UILabel *count;


}

-(IBAction)Up:(id)sender;
-(IBAction)Down:(id)sender;
-(IBAction)Reset:(id)sender;

-(IBAction) save;
-(IBAction) load;

@property NSInteger number;

@property (assign) UILabel *label;


@end

我觉得这是一个简单的修复..帮助?!

1 个答案:

答案 0 :(得分:2)

首先,使用小写字母开始变量名称。

CountUILabel吗?您正在设置文本,但您永远不会更新实际的Number。因此,不要保存NSString,而是保存NSNumber

[defaults setObject:@(self.number) forKey:@"number"]

Number设为属性:

@property NSInteger number;

然后,您可以为您的号码属性编写自定义设置器

- (void)setNumber:(NSInteger)number {
    _number = number;
    self.label.text = [NSString stringWithFormat:@"%l", _number];
    // your label should also be a propery
}

加载时,只需设置如下数字:

self.number = [[defaults objectForKey:@"number"] integerValue]

关于您更新的问题:

您看到的警告是因为您的属性为atomic,并且您正在实施的自定义设置器是非原子的。属性声明实际上应该是@property (nonatomic) NSInteger number;(这意味着超出了本问题的范围)。

您实际上从未使用该属性。摆脱int Number;并将所有Number替换为self.number。这样,您就可以为您的房产使用自定义设置器。

按钮的方法应如下所示:

-(IBAction)up:(id)sender; {
    self.number = self.number+1;
}

更新标签在number

的设置器中处理

同时从[defaults setObject:@(self.number) forKey:@"number"];移除load

-(IBAction)load {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.number = [[defaults objectForKey:@"number"] integerValue];
}