Ben kullanıyorum +[NSUserDefaults standardUserDefaults]uygulama ayarlarını depolamak için. Bu kabaca bir düzine dize değerlerini oluşur. Bir varsayılan değer belirleyerek, bunları sadece bu değerleri silmek kalıcı yerine mümkün mü?
Takas NSUserDefaults
Böyle uygulamanın kalıcı etki alanını kaldırabilirsiniz:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
3 ve üzeri Swift in:
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
Bu @samvermette tarafından cevap benzer ancak IMO biraz daha temiz olduğunu.
Bu kod kaydı etki alanına varsayılan sıfırlar:
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
Başka bir deyişle, removeObjectForKeyher anahtar için hiç söz konusu uygulamada kayıtlı.
Bu Apple Geliştirici Forumları üzerine Ken Thomases için Kredi iplik.
Kullandığınız denedin mi - removeObjectForKey?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
İşte Swift in cevabı:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Gelişmekte göreceğini gerekiyorsa, aynı zamanda tüm silerek sizin simülatörü sıfırlayabilirsiniz NSUserDefaults.
iOS Simülatörü -> İçerik ve Ayarları sıfırla ...
o da simülatörü tüm uygulamaları ve dosyaları sileceğini unutmayın.
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Swift in:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
onlar kod temiz hale ne zaman uzantıları seviyorum:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
Not: Bu cevap çok Swift için güncellendi.
Ne yaklaşık bir satırda olmasını?
Uzatma @Christopher Rogers cevap - Kabul biri.
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
ve evet, bir ara sen gerekebilir synchronizebunun,
[[NSUserDefaults standardUserDefaults] synchronize];
Ben, bunu yapmanın bir yöntemi oluşturduk
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Swift ?
hızlı onun daha kolay taşınabilir.
extension UserDefaults {
class func clean() {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
self.standard.removePersistentDomain(forName: aValidIdentifier)
self.standard.synchronize()
}
}
Ve kullanım :
UserDefaults.clean()
Bunu buldum:
osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"
Kaynak: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
Bir böcek ya da her türlü ama removePersistentDomainForNameher temizlerken çalışmıyor NSUserDefaultsdeğerleri.
Yani, daha iyi bir seçenek olduğunu sıfırlamak etmektir PersistentDomainve aşağıdaki şekilde aracılığıyla yapabileceği:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
Yukarıdaki tüm cevaplar çok alakalı, ama yine de yapamaz kimse silinen uygulama için userdefaults sıfırlamak için, o zaman senden içerik ayarları simülatör sıfırlayabilirsiniz ve işe yarayacak.
@ Folse cevabı üzerine genişletilmesi ... Bir daha doğru bir uygulama olacağına inanıyorum ...
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
for (NSString *key in [defaultsDictionary allKeys]) {
NSLog(@"removing user pref for %@", key);
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
... NSUserDefault en persistentDomainForName çağırarak: method. docs devlet olarak, yöntem "Belirtilen kalıcı etki alanında anahtarları ve değerleri içeren bir sözlük döndürür." dictionaryRepresentation çağrılması: bunun yerine, daha geniş bir kapsam için geçerli olan muhtemel diğer ayarları içerecek bir sözlük dönecektir.
Sonra tuşları üzerinde yineleme, reset edilecek değerlerin herhangi filtrelemek gerekiyorsa bunu yapmak için bir yoldur. Sadece bakılmaksızın uygulama için prefs tüm uçurmadın istiyorsanız Açıkçası, yukarıda yayınlanan diğer yöntemlerin sonra bir daha etkilidir.
Bu deneyin, Benim için çalışıyor.
kod tek hat
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
sıfırlama ihtiyacı uygulama ayarı mikrofon (benim durumumda) erişim için nsuserdefault edilirse, basit bir çözüm Anthony McCormick (cevabıdır ALAssetsLibraryErrorDomain Kod = -3312 "Küresel erişimi engellendi" - cihazda medyaya uygulama erişmesi nasıl? - Iphone ).
cihazda, Ayarlar> Genel gidin> Konum Uyarılarını Sıfırla> Reset













