Как я могу reset данные NSUserDefaults в симуляторе iPhone?

Я добавил NSUserDefault поиск данных в мое приложение, что довольно приятно. Но для тестирования я хотел бы reset все данные, которые я добавил в базу данных по умолчанию, чтобы все было в состоянии, когда пользователь запускает приложение в первый раз.

Я попытался позвонить:

[NSUserDefaults resetStandardUserDefaults];

но это ничего не делает. Значения по-прежнему сохраняются и могут быть восстановлены.

Ответ 1

Самый простой способ - удалить приложение из симулятора - так же, как вы удалите его с реального телефона, нажав (нажав) и удерживая нажатой кнопку до тех пор, пока значки не начнут вибрировать. Это удаляет все данные приложения, и в следующий раз, когда вы устанавливаете из Xcode это как в первый раз.

Если у вас есть другие данные приложения, которые вам нужно сохранить, у вас есть несколько вариантов.

Один из способов - иметь код отладки, который вызывает removeObjectForKey: на каждом из ваших ключей по умолчанию.

Другой - найти каталог, в котором установлена ​​копия симулятора, и удалить файл, содержащий настройки. Используйте это, чтобы найти приложение:

ls -ld ~/Library/Application\ Support/iPhone\ Simulator/User/Applications/*/*.app

Полный путь к вашему приложению будет содержать каталог, имя которого является UUID. В этом каталоге зайдите в Library/Preferences для файла настроек. Удалите это, и пользовательские настройки ушли.

Ответ 2

Вы хотите NSUserDefaults removePersistentDomainForName. Это приведет к удалению всех пользовательских значений по умолчанию для приложения:

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

Для получения дополнительной информации о классе NSUserDefaults см. Документы Apple.

В качестве альтернативы, если все, что вас интересует, это данные в iOS Simulator, вы можете сделать это с помощью iOS Simulator > Reset Содержание и настройки.

enter image description here

Ответ 3

Вы можете узнать, что вы "написали" на userdefaults для приложения, все внутри файла удалить этот файл .plist:

user name/Library/Preferences/com.theAppYouAreHandling.plist

Ответ 4

Собственно, это может быть неприемлемым в любых обстоятельствах, но поскольку я не сохраняю никакой информации о ценности в симуляторе, я просто Reset Контент и настройки из меню iPhone, из самого симулятора.

Ответ 5

В Swift 2.0 следующая строка будет reset для всех NSUserDefaults для приложения:

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)

Ответ 6

До xCode 6 и iOS8 Simulator изменилось расположение файла plist.

Я нашел *.plist в следующем каталоге:

[1]/Users/SOME-USERNAME/Library/Developer/CoreSimulator/Devices/SOME-DEVICE-ID/data/Library/Preferences/SP.UserDefaultsTest.plist

Удаление локального файла из пути [1] вручную, а NSUserDefaults исчезло.

Ответ 7

Здесь быстрая версия:

let domainName = NSBundle.mainBundle().bundleIdentifier!       
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName)

Ответ 8

В верхнем меню симулятора:

Simulator -> Reset Content and Settings...

Ответ 10

Вы можете использовать метод removePersistentDomainForName, доступный в классе NSUserDefaults.

Синтаксис:

- (void)removePersistentDomainForName:(NSString *)domainName

Пример:

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

Ответ 11

Если вы делаете это в unittest, вы можете захотеть сохранить состояние своего приложения в текущем симуляторе, вместо того чтобы непреднамеренно вытирать его каждый раз, когда вы также запускаете свои unittests. Один из способов сделать это - просто вставить старые значения для домена приложения в setUp(), а затем восстановить их в tearDown():

class MyClass_Tests: XCTestCase {
    static let domainName = Bundle.main.bundleIdentifier!
    static var oldUserDefaults: [String : Any]?

    override class func setUp() {
        super.setUp()
        // Hang onto this so we don't inadvertently wipe the app state while running tests.
        oldUserDefaults = UserDefaults.standard.persistentDomain(forName: domainName)
    }

    override class func tearDown() {
        // Restore the old values.
        UserDefaults.standard.setPersistentDomain(oldUserDefaults!, forName: domainName)
        super.tearDown()
    }

    override func setUp() {
        super.setUp()
        // Wipe the state for each test.
        UserDefaults.standard.removePersistentDomain(forName: MyClass_Tests.domainName)
    }

    override func tearDown() {
        super.tearDown()
    }
}