2013-10-21 23 views
11

silindikten sonra saklı tercihleri ​​almaya devam ediyor NSUserDefaults kullanılırken Xcode 5 üzerinde bir osx uygulaması programlama konusunda sorun yaşıyorum. Genellikle, bir kullanıcı tercihini hatırlamak için [[NSUserDefaults standardUserDefaults] setObject:@"This is an object" forKey:@"Test"] kullanıyoruz. Bundan sonra, uygulama ~/Library/Preferences/application.bundle.identifier.plist bir plist dosyası üretecektir.Xcode 5.0 NSUserdefaults, plist

Sorun, plist dosyasını sildikten sonra, uygulama hala sakladığım tercihleri ​​alabilir. Projeyi temizlemeye, xcode'u yeniden başlatmaya, türetilmiş klasördeki dosyaları silmeye çalışsa bile bu plânı temizlemenin bir yolu yoktur. Bu sorunu çözmemin tek yolu sistemi yeniden başlatmaktır, bu yüzden bellekte kayıtlı bir şey olduğunu tahmin ediyorum. Soru şu saklı tercihleri ​​nasıl temizleyebilirim? (Hata ayıklama ve sınamada el ile kod ekleyerek tercihleri ​​temizlemenin uygun olmadığını düşünüyorum.) Ve Xcode 4.x'in önceki sürümünü denedim, böyle bir sorun yok. "ApplicationDidFinishLaunching" altında

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
[defaults setObject:@"This is an object." forKey:@"Test"];  
NSLog(@"%@", [defaults objectForKey:@"Test"]); 

: Herkes sadece yeni bir kakao projesi oluşturmak ve benzeri kodu ekleyebilirsiniz ilgi vardır. Sonra gidin ve ~/Library/Preferences/application.bundle.identifier.plist'u silin. Bundan sonra, kodunuza [defaults setObject:@"This is an object." forKey:@"Test"]; satırını yorumlayın ve uygulamayı tekrar çalıştırın. Konsol hala "This is an object." gösterecektir Benim ortamım Mavericks GM ve Xcode 5.0 (5a1413).

Umarım bu sadece benim başıma bir şey değildir ve herhangi bir yardımı takdir eder!

+0

Hangi SDK'lara karşı bağlantı kuruyorsunuz? Silme işleminden sonra tercihlere hemen erişmeye çalışıyorsanız ve silinen verileri alırsanız, verilerin önbelleğe alınması mümkündür. – SevenBits

+2

olası bir kopyası var [Nerede NSUserDefaults Mac OS X'de veri depolar?] (Http://stackoverflow.com/questions/19234665/where-does-nsuserdefaults-store-data-on-mac-os-x) –

cevap

20

Bu, kullandığınız Xcode sürümü ile doğrudan ilgili olmayan bir OS X sorunudur. Apple'ın resmi çizgisi, tercihlerin kaldırılması için plist dosyasının silinmesinin resmi olarak desteklenmemesi ve daha yeni OS X sürümlerinde tercihlerin kaydedilme biçimindeki değişikliklerden dolayı güvenilir olmamasıdır.

tercihleri ​​kaldırmak için desteklenen yön/

defaults delete application.bundle.identifier 

defaults komut da kaldırabilir .:, terminalde örneğin defaults komutunu kullanın tercihlerinde bireysel ayarları değiştirmektir. Tüm ayrıntılar için bkz. man defaults.

+0

Teşekkür ederim çok fazla! – john

+0

Bugün buna da rastladım. @CRD gibi varsayılanları silerken, paket tanımlayıcısının büyük/küçük harfe duyarlı olduğundan emin olun! – Besi