【问题标题】:How do I Increment Integer and save it for use when program is re-run?如何在程序重新运行时递增整数并保存以供使用?
【发布时间】:2011-10-12 05:21:17
【问题描述】:

我正在尝试以一种不会导致重复或丢失数字的简单方式增加数字。这个数字最终将作为订单号存储在我的 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,我不确定使用其中一个是否有优点和缺点。

任何帮助/建议将不胜感激。

【问题讨论】:

    标签: iphone ios int increment nsnumber


    【解决方案1】:

    您可以使用NSUserDefaults 来存储ints 和其他基本类型(BOOLfloatNSStringNSArray)。

    例如,您可以使用

    检索int
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    int orderNumber = [prefs integerForKey:@"orderNumber"];
    

    然后使用

    保存int
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setInteger:orderNumber  forKey:@"orderNumber"];
    

    必要时也可以调用

       [prefs synchronize];
    

    以确保您访问的是最新信息。如果您在应用中的多个位置访问此 int,这将特别有用。

    【讨论】:

    • 非常感谢您的帮助,这正是我所追求的
    • 最好使用NSInteger 而不是int。在 64 位架构上,它会导致精度丢失,因为 NSInteger 被定义为 long
    【解决方案2】:
    -(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];
    }
    

    【讨论】:

      【解决方案3】:

      你会像这样使用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);
      }
      

      【讨论】:

      • 由于某种原因它不起作用。它想出了类方法+sharedDefaults not found。我改用了standardUserDefaults,并且效果很好。无论如何,感谢您快速详细的回复
      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2022-11-10
      相关资源
      最近更新 更多