Başvuru başlangıcında [NSUserDefaults registerDefaults:]
numaralı çağrı yoluyla kayıtlı tercih değerlerim var. Onları yeni bir aşamada yenileriyle değiştirmem gerekiyor, ancak yeni değerler kapsamı (anahtar kümesi) ilk listeden daha az. Bu yüzden, [NSUserDefaults registerDefaults:]
numaralı telefonu aradıktan sonra, bazı eski değiştirilmiş olan yeni değerlere sahibim. Önceden kayıtlı değerleri kaldırmak için bir olasılık var mı?Önceden [NSUserDefaults registerDefaults:] çağrısı ile kaydedilen değeri nasıl silebilirim?
cevap
NSRegistrationDomain
ürününü kaldırmak için removeVolatileDomainForName:
'u kullanabilirsiniz. Bu, registerDefaults:
aracılığıyla kaydedilen tüm değerleri temizler. Fakat bunu yapman gerekiyorsa, büyük ihtimalle yanlış bir şey yapıyorsunuz demektir. Doğru yolu, set...:forKey:
yöntemlerinden birini kullanarak yeni ayarları gerçekten depolamak olacaktır.
Bu çözüm, removeVolatileDomainForName, düzey – macwasik
Kayıtlı varsayılanları tamamen değiştirmek için, NSRegistrationDomain
etki alanını değiştirirsiniz (bu arada, bu da).
, sen
NSRegistrationDomain
değerleri almak, bireysel kayıtlı varsayılan kaldırmak kusurlu anahtar (lar) kaldırmak ve etki alanını değiştirmek için.
NSUserDefaults
A kategorisi şöyle görünebilir:
@implementation NSUserDefaults (UnRegisterDefaults)
- (void)unregisterDefaultForKey:(NSString *)defaultName {
NSDictionary *registeredDefaults = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSRegistrationDomain];
if ([registeredDefaults objectForKey:defaultName] != nil) {
NSMutableDictionary *mutableCopy = [NSMutableDictionary dictionaryWithDictionary:registeredDefaults];
[mutableCopy removeObjectForKey:defaultName];
[self replaceRegisteredDefaults:[mutableCopy copy]];
}
}
- (void)replaceRegisteredDefaults:(NSDictionary *)dictionary {
[[NSUserDefaults standardUserDefaults] setVolatileDomain:dictionary forName:NSRegistrationDomain];
}
@end
Motivasyon:
Ben (3. taraf uyumluluk nedenleriyle) turn on user-agent spoofing istiyorum çünkü bu ihtiyaç sebep. Kullanıcı-aracı sahteciliği, yalnızca değer registerDefaults:
aracılığıyla ayarlandığında işe yarar görünüyor, bu nedenle set...:forKey:
, kullanıcı aracısını dizgeyi durduramaz. Bir süre sonra kullanıcı aracısının sahteciliğini durdurmak istiyorsanız (uygulamayı yeniden başlatmadan), varsayılanları kaldırmanın bir yoluna ihtiyacım var. Ayrıca, uygulama kullanıcılarımın diğer kayıtlı varsayılanlarını temizlemek istemiyorum. Yukarıdaki çözüm, bunu mükemmel şekilde yerine getiriyor gibi görünüyor. EthanB orijinal cevabın
Swift 3 bağlantı noktası:
extension UserDefaults {
/// Unregisters a value set in the UserDefaults.registrationDomain, if it exists
func unregister(defaultsFor key: String) {
var registeredDefaults = volatileDomain(forName: UserDefaults.registrationDomain)
registeredDefaults[key] = nil
setVolatileDomain(registeredDefaults, forName: UserDefaults.registrationDomain)
}
}
geri Uygulamama varsayılan kullanıcı aracısı geri benim UIWebView
arasında deinit
kullanılır.
- 1. NSUserDefaults içindeki dizilere görüntüleri kaydetme + tabloyu gösterme = done, belirli bir hücrede görüntüyü nasıl silebilirim
- 2. NSUserDefaults öğesinde CoreData varlıklarını kaydetme
- 3. NSUserDefaults
- 4. NSMutableArray'ı NSUserDefaults
- 5. NSUserDefaults
- 6. AJAX çağrısı ile PHP değişkenine form değeri nasıl iletilir?
- 7. NSUserDefaults düzgün
- 8. Xamarin.iOS - NSUserDefaults
- 9. yerel sistemde kaydedilen html ile dosyayı kazıyarak
- 10. Swift - NSUserDefaults
- 11. jquery ile mysql'deki satır tablolarını nasıl silebilirim?
- 12. NSUserDefaults threadafe
- 13. NSUserDefaults Değer İçeriyor Veya Değil?
- 14. Bir veritabanı gibi NSUserDefaults değerleri nasıl depolanır?
- 15. NSUserDefaults uygulaması
- 16. NSUserDefaults güvenilmez?
- 17. ng-tekrar listesi, ajax çağrısı değeri
- 18. Yii'deki satırları nasıl silebilirim?
- 19. Xcode 5.0 NSUserdefaults, plist
- 20. Tablodaki ters kopyaları nasıl silebilirim
- 21. NSUserDefaults öğesinden int alma
- 22. Filezilla'da kaydedilen şifreyi kurtarıyor
- 23. jenkins'i linux'tan tamamen nasıl silebilirim
- 24. Objective-C NSUserDefaults
- 25. ajax çağrısı ile QuickSearchJS
- 26. jQuery.ajax() çağrısı ile onaylama()
- 27. Her görev çağrısı arasında özellik değeri nasıl yedeklenir
- 28. Yöntem çalıştırmadan yöntem çağrısı ve dönüş değeri nasıl atar?
- 29. Yetim Kubernetleri Pod'larını Nasıl Silebilirim
- 30. Kaydedilen projeden * .camrec biçimindeki görüntü nasıl kaydedilir?
iOS'ta çalışıyorsanız, dokümanlar (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html) " Kayıt etki alanı içeriği diske yazılmaz, uygulamanız her başladığında bu yöntemi çağırmanız gerekir.Programın Kaynaklar dizinine bir plist dosyası yerleştirebilir ve registerDefaults: Bu dosyadan okuduğunuz içeriğe çağrı yapabilirsiniz. " Öyleyse, eğer onları terk ederseniz boş kalırlar. Eski değerlerin neden varsayılanlarda kaldığına dair bir fikrin var mı? – Nick