Как увеличить Integer и сохранить его для использования при повторном запуске программы? - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь увеличить число простым способом, который не приведет к дублированию или пропущенным номерам. Этот номер в конечном итоге будет сохранен в поле в моей сущности 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, я не уверен, есть ли преимущества и недостатки использования того или другого.

Любая помощь / предложения будут оценены.

Ответы [ 3 ]

5 голосов
/ 12 октября 2011

Вы можете использовать NSUserDefaults для хранения int s и других основных типов (BOOL, float, NSString, NSArray).

Например, вы можете получитьint с помощью

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

, а затем сохраните int с помощью

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

При необходимости вы также можете позвонить

   [prefs synchronize];

, чтобы убедиться, что выДоступ к самой актуальной информации.Это особенно полезно, если вы обращаетесь к этому int в нескольких местах вашего приложения.

1 голос
/ 26 декабря 2012
-(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];
}
0 голосов
/ 12 октября 2011

Вы бы использовали 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);
}
...