NSUserDefaults εκκαθάριση

ψήφοι
274

Είμαι με τη χρήση +[NSUserDefaults standardUserDefaults]για να αποθηκεύσετε τις ρυθμίσεις της εφαρμογής. Αυτή αποτελείται από τιμές συμβολοσειράς περίπου μια δωδεκάδα. Είναι δυνατόν να διαγράψετε αυτές τις αξίες μόνιμα και όχι μόνο αποβίβασή τους σε μια προκαθορισμένη τιμή;

Δημοσιεύθηκε 13/02/2009 στις 08:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


15 απαντήσεις

ψήφοι
495

Μπορείτε να αφαιρέσετε επίμονες τομέα της εφαρμογής, όπως αυτό:

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

Σε Swift 3 και αργότερα:

if let bundleID = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundleID)
}

Αυτό είναι παρόμοιο με την απάντηση @samvermette, αλλά είναι λίγο πιο καθαρό κομμάτι του ΙΜΟ.

Απαντήθηκε 26/07/2011 στις 03:55
πηγή χρήστη

ψήφοι
101

Αυτός ο κωδικός επαναφέρει τις προεπιλεγμένες ρυθμίσεις στο πεδίο καταχώρησης:

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

Με άλλα λόγια, removeObjectForKeyγια κάθε βασικό έχετε εγγραφεί ποτέ σε αυτό το app.

Συντελεστές για να Ken Thomases αυτή της Apple Developer Φόρουμ νήμα.

Απαντήθηκε 10/06/2010 στις 05:40
πηγή χρήστη

ψήφοι
95

Μήπως δοκιμάστε να χρησιμοποιήσετε - removeObjectForKey;

 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Απαντήθηκε 13/02/2009 στις 08:51
πηγή χρήστη

ψήφοι
29

Εδώ είναι η απάντηση στο Swift:

let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
Απαντήθηκε 15/04/2015 στις 14:36
πηγή χρήστη

ψήφοι
27

Αν το χρειάζεστε παράλληλα με την ανάπτυξη, μπορείτε επίσης να επαναφέρετε εξομοιωτή σας, διαγράφοντας όλα τα NSUserDefaults.

iOS Simulator -> Επαναφορά περιεχομένου και των ρυθμίσεων ...

Λάβετε υπόψη ότι θα διαγραφούν επίσης όλες τις εφαρμογές και τα αρχεία σε προσομοιωτή.

Απαντήθηκε 06/09/2011 στις 15:54
πηγή χρήστη

ψήφοι
13
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
                    [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
Απαντήθηκε 20/01/2014 στις 04:56
πηγή χρήστη

ψήφοι
6

Σε Swift:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
Απαντήθηκε 18/08/2016 στις 10:36
πηγή χρήστη

ψήφοι
5

Λατρεύω τις επεκτάσεις όταν κάνουν τον κωδικό σκούπα:

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

        self.removePersistentDomainForName(domainName)
    }
}
Απαντήθηκε 22/08/2016 στις 22:33
πηγή χρήστη

ψήφοι
5

Σημείωση: Αυτή η απάντηση έχει ενημερωθεί για Swift πάρα πολύ.

Τι πρόκειται να το έχετε σε μία γραμμή;

Η επέκταση @Christopher Rogers απάντηση - η αποδεκτή μία.

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];

και ναι, κάποια στιγμή μπορεί να χρειαστεί να synchronizeτο,

[[NSUserDefaults standardUserDefaults] synchronize];

Έχω δημιουργήσει μια μέθοδο για να γίνει αυτό,

- (void) clearDefaults {
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

Swift ;

Με την ταχεία του ακόμα πιο εύκολη.

extension UserDefaults {
    class func clean() {
        guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
        self.standard.removePersistentDomain(forName: aValidIdentifier)
        self.standard.synchronize()
    }
}

Και τη χρήση :

UserDefaults.clean()
Απαντήθηκε 11/08/2015 στις 06:02
πηγή χρήστη

ψήφοι
5

Βρηκα αυτο:

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

Πηγή: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab

Απαντήθηκε 04/12/2014 στις 18:33
πηγή χρήστη

ψήφοι
2

Είναι ένα bug ή οτιδήποτε, αλλά η removePersistentDomainForNameδεν λειτουργεί ενώ αποφεύγει όλες τις NSUserDefaultsτιμές.

Έτσι, η καλύτερη επιλογή είναι ότι για να επαναφέρετε το PersistentDomainκαι αυτό μπορείτε να το κάνετε μέσω ακόλουθο τρόπο:

NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
Απαντήθηκε 09/03/2016 στις 08:28
πηγή χρήστη

ψήφοι
1

Όλες οι παραπάνω απαντήσεις είναι πολύ σημαντικό, αλλά αν κάποιος εξακολουθεί να αδυνατεί να επαναφέρετε τις userdefaults για διαγραφή της εφαρμογής, στη συνέχεια, μπορείτε να επαναφέρετε τις ρυθμίσεις του περιεχομένου σας προσομοιωτή, και αυτό θα λειτουργήσει.εισάγετε περιγραφή της εικόνας εδώ

Απαντήθηκε 16/10/2014 στις 09:44
πηγή χρήστη

ψήφοι
1

Επέκταση σε απάντηση @ folse του ... Πιστεύω ότι η πιο σωστή εφαρμογή θα είναι ...

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];
    }

... καλώντας persistentDomainForName NSUserDefault είναι: η μέθοδος. Καθώς η κατάσταση docs, η μέθοδος «Επιστρέφει ένα λεξικό που περιέχει τα πλήκτρα και τις αξίες στον καθορισμένο επίμονη τομέα.» Κλήση dictionaryRepresentation: αντ 'αυτού, θα επιστρέψει ένα λεξικό που θα περιλαμβάνει πιθανόν άλλες ρυθμίσεις, όπως εφαρμόζεται σε ένα ευρύτερο πεδίο.

Αν χρειαστεί να φιλτράρετε οποιαδήποτε από τις τιμές που πρόκειται να επαναφέρετε, στη συνέχεια, την επανάληψη των κλειδιών είναι ο τρόπος για να το κάνει. Προφανώς, αν θέλετε να nuke ακριβώς όλα τα προτιμήσεων για το app χωρίς να λαμβάνεται υπόψη, τότε μια από τις άλλες μεθόδους που δημοσιεύτηκε παραπάνω είναι η πιο αποτελεσματική.

Απαντήθηκε 18/02/2014 στις 02:42
πηγή χρήστη

ψήφοι
0

Δοκιμάστε αυτό, αυτό λειτουργεί για μένα.

Ενιαία γραμμή κώδικα

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
Απαντήθηκε 01/03/2018 στις 05:57
πηγή χρήστη

ψήφοι
0

αν η ρύθμιση αίτηση χρειάζεται επαναφορά nsuserdefault για την πρόσβαση στο μικρόφωνο (δική μου περίπτωση), μια απλή λύση είναι η απάντηση από τον Anthony McCormick ( iPhone - Πώς να ενεργοποιήσετε την πρόσβαση εφαρμογή στα μέσα ενημέρωσης στη συσκευή - ALAssetsLibraryErrorDomain Κωδικός = -3.312 «Παγκόσμια επιτρέπεται η πρόσβαση» ).

στη συσκευή, μεταβείτε στις Ρυθμίσεις> Γενικά> Επαναφορά> Επαναφορά Προειδοποιήσεις Τοποθεσία

Απαντήθηκε 15/08/2014 στις 00:15
πηγή χρήστη

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