0

我在编码方面非常陌生,并且正在练习并正在制作一个简单的计数/计数器应用程序。我正在尝试保存并加载该号码,以便用户在关闭应用程序后可以从上次中断的地方继续。

保存和加载按钮实际上工作得很好......除了一旦我加载保存的号码,我按下 +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

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

4

1 回答 1

2

首先,变量名以小写字母开头。

Count一个UILabel?您正在设置文本,但您永远不会更新实际的Number. 所以不是保存一个NSStringNSNumber而是保存一个:

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

创建Number一个属性:

@property NSInteger number;

然后,您可以为您的 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;并替换所有出现的Numberwith self.number。这样,您正在为您的属性使用自定义设置器。

按钮的方法应如下所示:

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

更新标签在 setter 中处理number

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

-(IBAction)load {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.number = [[defaults objectForKey:@"number"] integerValue];
}
于 2013-08-13T02:08:46.083 回答