Saya menggunakan +[NSUserDefaults standardUserDefaults]
untuk menyimpan pengaturan aplikasi. Ini terdiri dari sekitar selusin nilai string. Apakah mungkin untuk menghapus nilai-nilai ini secara permanen daripada hanya mengaturnya ke nilai default?
ios
objective-c
cocoa-touch
nsuserdefaults
TonyNeallon
sumber
sumber
Jawaban:
Anda dapat menghapus domain persisten aplikasi seperti ini:
Dalam Swift 3 dan yang lebih baru:
Ini mirip dengan jawaban oleh @samvermette tetapi sedikit lebih bersih IMO.
sumber
Kode ini mengatur ulang default ke domain pendaftaran:
Dengan kata lain, itu
removeObjectForKey
untuk setiap kunci tunggal yang pernah Anda daftarkan di aplikasi itu.Penghargaan untuk Ken Thomases di utas Forum Pengembang Apple ini .
sumber
[NSUserDefaults resetStandardUserDefaults]
tidak melakukan ini di luar jangkauan saya.Apakah Anda mencoba menggunakan -
removeObjectForKey
?sumber
Inilah jawabannya di Swift:
sumber
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
one-linerif let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
Jika Anda membutuhkannya saat mengembangkan, Anda juga dapat mengatur ulang simulator Anda, menghapus semua
NSUserDefaults
.iOS Simulator -> Setel Ulang Konten dan Pengaturan ...
Ingatlah bahwa itu juga akan menghapus semua aplikasi dan file pada simulator.
sumber
sumber
Dalam Swift:
sumber
Catatan: Jawaban ini telah diperbarui untuk Swift juga.
Bagaimana kalau memilikinya di satu baris?
Extending @Christopher Rogers menjawab - yang diterima
dan ya, kadang-kadang Anda mungkin perlu
synchronize
,Saya telah membuat metode untuk melakukan ini,
Cepat ?
Dengan cepat bahkan lebih mudah.
Dan penggunaan :
sumber
Saya suka ekstensi ketika mereka membuat kode lebih bersih:
Cepat 5
sumber
Aku menemukan ini:
Sumber: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
sumber
Semua jawaban di atas sangat relevan, tetapi jika seseorang masih tidak dapat mengatur ulang kesalahan pengguna untuk aplikasi yang dihapus, maka Anda dapat mengatur ulang pengaturan konten simulator Anda, dan itu akan berhasil.
sumber
Ini bug atau apa pun tetapi
removePersistentDomainForName
tidak berfungsi saat membersihkan semuaNSUserDefaults
nilai.Jadi, pilihan yang lebih baik adalah mengatur ulang
PersistentDomain
dan yang dapat Anda lakukan melalui cara berikut:sumber
Memperluas jawaban @ folse ... Saya yakin implementasi yang lebih tepat adalah ...
... memanggil metode persistentDomainForName: NSUserDefault. Sebagai status dokumen, metode "Mengembalikan kamus yang berisi kunci dan nilai dalam domain persisten yang ditentukan." Calling dictionaryRepresentation: sebagai gantinya, akan mengembalikan kamus yang kemungkinan akan mencakup pengaturan lain yang berlaku untuk cakupan yang lebih luas.
Jika Anda perlu menyaring salah satu nilai yang harus diatur ulang, maka iterasi tombol adalah cara untuk melakukannya. Tentunya, jika Anda ingin mengabaikan semua prefs untuk aplikasi tanpa memperhatikan, maka salah satu metode lain yang diposting di atas adalah yang paling efisien.
sumber
jika pengaturan aplikasi yang perlu diatur ulang adalah nsuserdefault untuk akses ke mikrofon (kasus saya), solusi sederhana adalah jawaban dari Anthony McCormick ( Iphone - Bagaimana mengaktifkan akses aplikasi ke media pada perangkat? - ALAssetsLibraryErrorDomain Code = -3312 "Global ditolak akses" ).
pada perangkat, buka Pengaturan> Umum> Reset> Reset Peringatan Lokasi
sumber
Coba ini, Ini bekerja untuk saya.
Baris kode tunggal
sumber