Takas NSUserDefaults

oy
274

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ü?

Oluştur 13/02/2009 saat 08:49
kaynak kullanıcı
Diğer dillerde...                            


15 cevaplar

oy
495

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.

Cevap 26/07/2011 saat 03:55
kaynak kullanıcı

oy
101

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.

Cevap 10/06/2010 saat 05:40
kaynak kullanıcı

oy
95

Kullandığınız denedin mi - removeObjectForKey?

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Cevap 13/02/2009 saat 08:51
kaynak kullanıcı

oy
29

İşte Swift in cevabı:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Cevap 15/04/2015 saat 14:36
kaynak kullanıcı

oy
27

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.

Cevap 06/09/2011 saat 15:54
kaynak kullanıcı

oy
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Cevap 20/01/2014 saat 04:56
kaynak kullanıcı

oy
6

Swift in:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Cevap 18/08/2016 saat 10:36
kaynak kullanıcı

oy
5

onlar kod temiz hale ne zaman uzantıları seviyorum:

extension NSUserDefaults {
    func clear() {
        guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
            return
        }

        self.removePersistentDomainForName(domainName)
    }
}
Cevap 22/08/2016 saat 22:33
kaynak kullanıcı

oy
5

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()
Cevap 11/08/2015 saat 06:02
kaynak kullanıcı

oy
5

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

Cevap 04/12/2014 saat 18:33
kaynak kullanıcı

oy
2

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!)
Cevap 09/03/2016 saat 08:28
kaynak kullanıcı

oy
1

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.Burada görüntü açıklama girin

Cevap 16/10/2014 saat 09:44
kaynak kullanıcı

oy
1

@ 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.

Cevap 18/02/2014 saat 02:42
kaynak kullanıcı

oy
0

Bu deneyin, Benim için çalışıyor.

kod tek hat

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
Cevap 01/03/2018 saat 05:57
kaynak kullanıcı

oy
0

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

Cevap 15/08/2014 saat 00:15
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more