Как я могу 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...
Ответ 9
Выполняет ли "removePersistentDomainForName:" то, что вы хотите?
http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUserDefaults/removePersistentDomainForName:
Ответ 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()
}
}