это может показаться настоящим НООБ! Я хочу проверить, входит ли пользователь в мое приложение во второй раз, чтобы сохранить счетчик запусков, который я использую NSUserDefaults
. Я осуществил следующий код в моем rootViewController
«сек viewDidLoad
метода:
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];
все работает нормально, но проблема в том, что когда я удаляю (удаляю и переустанавливаю) приложение согласно здесь и здесь, данные должны быть очищены, но это не так, и после переустановки приложения предыдущие данные все еще отображаются. Я запускаю свое приложение на симуляторе iOS с использованием xCode6-beta и нацелен на приложение на iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Реза Шайестехпур
источник
источник
NSMutableArray
сохранял для некоторого ключа, был сохранен как a,NSArray
и изменение его привело к сбою моего приложения. .. Я рекомендую сохранить aNSArray
и, когда вы захотите использовать его позже, преобразовать его вNSMutableArray
using[NSMutableArray arrayWithArray:array];
. Надеюсь, это поможет.Ответы:
Я думаю, это связано с ошибкой в симуляторе iOS8 Beta Simulator.
Ожидаемое поведение заключается в том, что при удалении приложения также удаляются NSUserDefaults для этого приложения.
Быстрое и неприятное решение на данный момент - нажать iOS Simulator -> Reset Content and Settings.
Xcode 9.2 с Simulator 10 по-прежнему представляет эту проблему. Параметр меню теперь «Оборудование». Удалить все содержимое и настройки
Я отправил отчет об ошибке, кстати
источник
Поскольку сброс содержимого и настроек является ядерным вариантом, вы можете рассмотреть два других варианта, пока не будет устранена ошибка в симуляторе iOS 8 / Xcode 6 GM:
Вы можете вручную удалить файл plist, в котором
NSUserDefaults
хранятся файлы. В настоящее время он находится по адресу~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
. Немного утомительно найти подходящий симулятор для работы среди имен каталогов UUID. РЕДАКТИРОВАТЬ : 2014-10-28 20-34-52 Правильный путь:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Вы можете выполнить «операцию» над этим списком (возможно, используя этап сборки сценария выполнения), используя plistbuddy, например
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
источник
Для тех, кто сталкивается с той же проблемой.
Если у вас есть более 1 приложения в одной группе, и все они используют группы приложений (ВКЛЮЧЕНО в разделе «Возможности»), вам придется удалить все приложения с устройства, чтобы очистить настройки пользователя по умолчанию.
Поскольку пользовательские значения по умолчанию являются общими, даже если одно из приложений находится на устройстве, оно не будет удалено, поскольку это приложение будет использовать пользовательские настройки.
источник
Код должен нормально работать на устройстве. Возможно какие-то баги в симуляторе.
Попробуйте сбросить содержимое и настройки симулятора.
источник
это ошибка, и вы можете удалить NSUserDefaults с помощью следующего кода
источник
Хотя это все еще ошибка, другой вариант может заключаться в удалении определенного ключа (ключей) в NSUserDefaults. В большинстве случаев при тестировании / разработке мы заботимся только о нескольких ключах, а не обо всем в NSUserDefaults. Если вас интересуют только несколько ключей, я предлагаю добавить
removeObjectForKey
:Добавление
removeObjectForKey
имитирует первый запуск приложения, а его комментирование будет моделировать все последующие выполнения приложения.источник
В моем случае я нашел * .plist в следующем каталоге:
[1] / Users / НЕКОТОРЫЕ- ИМЯ-ПОЛЬЗОВАТЕЛЯ / Библиотека / Разработчик / CoreSimulator / Devices / НЕКОТОРЫЕ-УСТРОЙСТВО-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Проблема: удаление приложения в xCode 6 (симулятор iOS 8), но файл остается на диске, как указано выше.
Решение. Удалив найденный файл по пути [1] вручную, NSUserDefaults исчезнут.
Так что раздражающий способ сбросить симулятор больше не нужен.
источник