2016-04-13 7 views
1

Я использую NSUserDefaults для хранения пар ключ/значение в моем приложении. Ниже приведен пример кода:NSUserDefaults ненадежный?

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    let ud = NSUserDefaults.standardUserDefaults() 
    if !(ud.boolForKey("launched_before")) { 
     print("first_launch") 
     ud.setBool(true, forKey: "launched_before") 
    } else { 
     print("not_first_launch") 
    } 
} 

Первый раз, когда я запустить приложение, она печатает «first_launch», как и ожидалось, и второй раз, когда я запустить приложение, он печатает «not_first_launch», как ожидается, тоже. Однако, если я продолжу повторное запуск приложения, нажав кнопку «Стоп» и «Запустить» в Xcode через несколько раз (может быть, от 4 до 20 раз), boolForKey("launched_before") вернет false, что неверно.
Я тестирую свое устройство (iPhone 6, iOS 9.3.1) и Xcode 7.3.
Кто-нибудь может мне помочь?

ответ

3

NSUserDefaults сохраняет неудовлетворительно, что еще хуже, что вы просто прекратили его с помощью Xcode stop/run.

Вызов NSUserDefaults.StandardUserDefaults().synchronize сохранит данные.

+0

это может помочь! –

+0

Но как это происходит во второй раз, он работает так, как ожидалось, что означает, что настройка boolean является успешной, не так ли? – TangZijian

+0

это поможет вам понять NSUserDefault, как это работает: http://www.accella.net/knowledgebase/nsuserdefaults-some-pretty-good-practices/ –