我是新编码,正在练习并正在制作一个简单的计数器/计数器应用程序。我正在尝试保存并加载该号码,以便用户在关闭应用后可以继续停止。
保存和加载按钮实际上工作得很好......除非我加载保存的号码,然后按下+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
我觉得这是一个简单的修复..帮助?!
答案 0 :(得分:2)
首先,使用小写字母开始变量名称。
Count
是UILabel
吗?您正在设置文本,但您永远不会更新实际的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];
}