我试图以一种简单的方式增加一个数字,这不会导致重复或丢失数字。这个数字最终将作为订单号存储在我的coreData实体的一个字段中,这就是为什么我不能有重复或错过的数字。
我有一个输入订单的视图,当它初始化时,它必须提供正确的订单号,这就是我编码的内容:
-(void) viewDidLoad {
// If no orders have previously been entered the order number will be changed from 0 to 1
if (orderNumber == 0) {
orderNumber = orderNumber + 1;
}
// If orders have previously been entered the order number will be given the value that has previously been stored in orderNumber
else orderNumber = orderNumber;
NSLog(@"The Order Number is %d",orderNumber);
}
当视图上的表单完成后,按下完成按钮,这将完成订单。清除视图上的所有文本字段,并将订单号增加1,以便输入下一个订单。
-(void) doneButtonTapped:(id)sender{
orderNumber = orderNumber + 1;
NSLog(@"orderNumber is increased to %d",orderNumber);
}
我的头文件包含以下内容:
int orderNumber;
@property (nonatomic,assign) int orderNumber;
这在应用程序运行时有效但如果我退出应用程序并重新运行它,我的orderNumber将从1开始。
当应用程序再次运行时,如何存储/保存与orderNumber关联的值以便在viewDidLoad中使用?
我的方法是增加确定还是有更好的方法?我使用过int但是我看到其他人使用NSNumber,我不确定是否有优势&使用其中一种的缺点。
任何帮助/建议都将不胜感激。
答案 0 :(得分:5)
您可以使用NSUserDefaults
来存储int
和其他基本类型(BOOL
,float
,NSString
,NSArray
)。< / p>
例如,您可以使用
检索int
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int orderNumber = [prefs integerForKey:@"orderNumber"];
然后使用
保存int
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:orderNumber forKey:@"orderNumber"];
必要时,您也可以致电
[prefs synchronize];
确保您访问最新信息。如果您要在应用中的多个位置访问此int
,这将非常有用。
答案 1 :(得分:1)
-(void) viewDidLoad{
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
//now take an int to store value
int count = [userDefaults integerForKey:@"my_key"];
// since we didn't stored any value for key "my_key" the above statement returns 0 by default
//do your stuff by using that variable
// now to increment and store the updated value ,we have to write following stuff
[userDefaults setInteger:count+1 forKey:@"my_key"];
[userDefaults synchronize];
}
答案 2 :(得分:0)
你可以这样使用NSUserDefaults
:
-(void) viewDidLoad {
// If no orders have previously been entered the order number will be changed from 0 to 1
int orderNumber = [[NSUserDefaults sharedDefaults] intForKey:@"orderNumber"];
if (orderNumber == 0) {
orderNumber = orderNumber + 1;
}
// If orders have previously been entered the order number will be given the value that has previously been stored in orderNumber
else orderNumber = orderNumber;
[[NSUserDefaults sharedDefaults] setInt:orderNumber ForKey:@"orderNumber"];
[[NSUserDefaults sharedDefaults] synchronize];
NSLog(@"The Order Number is %d",orderNumber);
}
-(void) doneButtonTapped:(id)sender{
orderNumber = orderNumber + 1;
[[NSUserDefaults sharedDefaults] setInt:orderNumber ForKey:@"orderNumber"];
[[NSUserDefaults sharedDefaults] synchronize];
NSLog(@"orderNumber is increased to %d",orderNumber);
}