2014-01-16 10 views
0

Im, используя код ниже, чтобы создать уникальный i.d. для первичных ключей или где я нуждаюсь в них в программе. Код работает, и никогда не было ошибок, но иногда во время отладки я заметил, что он не всегда увеличивается с ошибками.Создание первичного ключа с NSUserDefaults

Можно ли улучшить код для надежности?

- (NSString*)createUniqueID 
{ 

    //create a unique ID 

    int currentID = [[[NSUserDefaults standardUserDefaults] valueForKey:@"kUniqueID"] intValue]; 
    currentID++; 

    NSString *returnID = [NSString stringWithFormat:@"%i", currentID]; 
    [[NSUserDefaults standardUserDefaults] setValue:returnID forKey:@"kUniqueID"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; //added sync 

    return returnID; 

} 
+0

заботится о безопасности потоков? –

+0

Тема темы уже вне меня. Сожалею. working ... – user2228755

+0

Зачем использовать 'valueForKey:' и 'setValue: forKey:'? Просто используйте 'integerForKey:' и 'setInteger: forKey:'. Тогда вам не нужно конвертировать в/из строки, чтобы увеличить значение. – rmaddy

ответ

0

кажется вам нужно вызвать функцию синхронизации

[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

Было бы разумно назвать это после обновления. Благодаря! – user2228755

+1

Обратите внимание, что вызов 'synchronize' необходим только в том случае, если приложение было убито (например, перезапуск во время отладки), прежде чем они будут автоматически синхронизированы. По умолчанию пользователи по умолчанию синхронизируются для вас по мере запуска приложения. Я только вызываю 'synchronize', когда приложение переходит в фоновый режим и после некоторого критического обновления (на случай, если приложение сразу же сработает). – rmaddy

Смежные вопросы