ini mungkin terdengar NOOB nyata! Saya ingin memeriksa apakah ini kedua kalinya pengguna memasuki aplikasi saya, jadi untuk menjaga jumlah proses yang saya gunakan NSUserDefaults
. Saya telah menerapkan kode berikut di saya rootViewController
's viewDidLoad
metode:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);
if ([userDefaults integerForKey:@"runCount"] != 1) {
//not the 2nd run
[userDefaults setInteger:1 forKey:@"runCount"];
NSLog(@"not 2nd run");
} else {
//second run or more
NSLog(@"2nd run");
}
[userDefaults synchronize];
semuanya berfungsi dengan baik, tetapi masalahnya adalah ketika saya menghapus (menghapus dan menginstal ulang) aplikasi sesuai di sini dan di sini datanya harus dihapus, tetapi tidak dan setelah menginstal ulang aplikasi data sebelumnya masih muncul. Saya menjalankan aplikasi saya di simulator iOS menggunakan xCode6-beta dan menargetkan aplikasi di iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
sumber
sumber
NSMutableArray
disimpan sebagaiNSArray
dan mengubahnya membuat aplikasi saya macet. .. Saya sarankan untuk menyimpanNSArray
dan ketika Anda ingin menggunakannya nanti, transmisikan keNSMutableArray
menggunakan[NSMutableArray arrayWithArray:array];
. Saya harap itu membantu.Jawaban:
Saya rasa ini karena bug di iOS8 Beta Simulator.
Perilaku yang diharapkan adalah ketika aplikasi dihapus, NSUserDefaults untuk aplikasi itu juga dihapus.
Solusi cepat dan menjengkelkan untuk saat ini adalah dengan mengklik, iOS Simulator -> Reset Content and Settings.
Xcode 9.2 dengan Simulator 10 masih menghadirkan masalah ini. Opsi menu sekarang adalah Perangkat Keras .. Hapus Semua Konten dan Pengaturan
Saya mengirimkan laporan bug btw
sumber
Karena Atur Ulang Konten dan Pengaturan adalah opsi inti, Anda dapat mempertimbangkan dua opsi lain hingga bug pada simulator GM iOS 8 / Xcode 6 diatasi:
Anda dapat menghapus file plist tempat
NSUserDefaults
penyimpanannya secara manual . Ini saat ini berada di~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
. Agak membosankan untuk menemukan simulator yang tepat untuk digunakan di antara nama direktori UUID. EDIT : 2014-10-28 20-34-52 Jalur yang benar:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Anda dapat melakukan "operasi" pada plist itu (mungkin menggunakan fase pembuatan skrip jalankan) menggunakan plistbuddy mis
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
sumber
Untuk siapa pun yang menghadapi masalah yang sama.
Jika Anda memiliki lebih dari 1 aplikasi di bawah grup yang sama dan semuanya menggunakan grup aplikasi (AKTIF dalam kemampuan), Anda harus menghapus semua aplikasi dari perangkat agar default pengguna dihapus.
Karena default pengguna dibagikan, meskipun salah satu aplikasi ada di perangkat maka itu tidak akan dihapus, karena aplikasi itu akan menggunakan default pengguna.
sumber
Kode harus berfungsi dengan baik di perangkat. Mungkin beberapa bug di simulator.
Coba Atur Ulang Isi dan Pengaturan untuk Simulator.
sumber
ini adalah bug, dan Anda dapat menghapus NSUserDefaults dengan kode berikut
sumber
Meskipun ini masih merupakan bug, opsi lain adalah menghapus kunci tertentu di NSUserDefaults. Sebagian besar waktu, saat menguji / mengembangkan, kami hanya peduli tentang beberapa kunci dan tidak semuanya di NSUserDefaults. Jika Anda hanya peduli tentang beberapa kunci daripada yang saya usulkan untuk menambahkan
removeObjectForKey
:Menambahkan
removeObjectForKey
simulasi aplikasi yang dijalankan pertama kali, mengomentarinya akan menyimulasikan semua eksekusi aplikasi berikutnya.sumber
Dalam kasus saya, saya menemukan * .plist di direktori berikut:
[1] / Pengguna / BEBERAPA NAMA PENGGUNA / Pustaka / Pengembang / CoreSimulator / Perangkat / BEBERAPA-PERANGKAT-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Masalah: Menghapus aplikasi di xCode 6 (simulator iOS 8) tetapi file tetap di disk seperti yang disebutkan di atas.
Larutan: Menghapus file yang terletak dari jalur [1] secara manual dan NSUserDefaults hilang.
Jadi cara yang mengganggu untuk mengatur ulang simulator tidak lagi diperlukan.
sumber