2016-04-13 37 views
1

Uygulamamda anahtar/değer çiftlerini depolamak için NSUserDefaults kullanıyorum.NSUserDefaults güvenilmez?

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") 
    } 
} 

Ben uygulamayı başlatmak ilk kez, beklendiği gibi "first_launch", yazdırır ve çok beklendiği gibi ben uygulamayı başlatmak ikinci kez, "not_first_launch" yazdırır: Aşağıda örnek kod verilmiştir. Ancak, Xcode'daki Xcode'daki Stop and Run (Durdur ve Çalıştır) düğmesine basarak uygulamayı birkaç kez yeniden başlatmaya devam edersem (belki 4 ila 20 defa), boolForKey("launched_before") yanlıştır, bu yanlıştır.
Cihazımda (iPhone 6, iOS 9.3.1) ve Xcode 7.3 üzerinde test yapıyorum.
Bana herkes yardım edebilir mi?

cevap

3

NSUserDefaults sizin sadece Xcode durdurma/çalıştırma aracılığıyla sonlandırma da kötü olduğunu, güvenilmez kaydetmek gelmez.

NSUserDefaults.StandardUserDefaults().synchronize numaralı telefonu arayarak verileri kaydedebilirsiniz.

+0

bu yardımcı olabilir! –

+0

Ama ikinci kez beklendiği gibi çalışır, yani boolean ayarı başarılı demektir, doğru mu? – TangZijian

+0

, bu NSUserDefault nasıl çalıştığını anlamanıza yardımcı olacaktır: http://www.accella.net/knowledgebase/nsuserdefaults-some-pretty-good-practices/ –