我已将NSUserDefault数据检索添加到我的应用程序,这非常好。但是为了进行测试,我想重置我添加到默认数据库的所有数据,以便当用户第一次启动应用程序时,所有数据都处于状态。
我试着打电话:
[NSUserDefaults resetStandardUserDefaults];
但这没有做任何事情。默认值仍然保存,可以检索。
答案 0 :(得分:99)
你想要NSUserDefaults removePersistentDomainForName
。这将删除应用程序的所有用户默认值:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
有关NSUserDefaults
课程的详情,请参阅Apple docs。
或者,如果你关心的只是iOS模拟器中的数据,你可以通过 iOS模拟器>来做到这一点。重置内容和设置。
答案 1 :(得分:51)
最简单的方法是从模拟器中移除应用程序 - 就像您从真实手机中删除它一样,通过点击(单击)并按住直到图标开始振动。这将删除所有应用程序数据,下次从Xcode安装时,它就像第一次一样。
如果您需要保留其他应用数据,则可以选择几种方式。
一种方法是在每个默认密钥上都有一些调用removeObjectForKey的调试代码。
另一种方法是找到安装模拟器副本的目录,并删除包含首选项的文件。使用它来查找应用程序:
ls -ld ~/Library/Application\ Support/iPhone\ Simulator/User/Applications/*/*.app
应用的完整路径将包含名称为UUID的目录。在该目录中,在“库/首选项”中查找首选项文件。删除它,用户首选项就不见了。
答案 2 :(得分:6)
你可能会发现你已经“写”到用户默认的应用程序都在文件中 删除此.plist文件有效:
user name/Library/Preferences/com.theAppYouAreHandling.plist
答案 3 :(得分:5)
实际上,这可能不适用于所有情况,但由于我在模拟器中没有任何有价值的信息,我只是从模拟器本身的iPhone菜单中重置内容和设置。
答案 4 :(得分:5)
在Swift 2.0中,以下1行将重置应用的所有NSUserDefault:
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
答案 5 :(得分:3)
Til Xcode 6和iOS 8 Simulator plist文件的位置发生了变化。
我在以下目录中找到了* .plist:
[1] /Users/SOME-USERNAME/Library/Developer/CoreSimulator/Devices/SOME-DEVICE-ID/data/Library/Preferences/SP.UserDefaultsTest.plist
手动删除路径[1]中找到的文件,NSUserDefaults消失了。
答案 6 :(得分:2)
这是快速版本:
D:\ Batch files\1.bat
答案 7 :(得分:2)
在模拟器顶部菜单中:
Simulator -> Reset Content and Settings...
答案 8 :(得分:0)
您可以使用NSUserDefaults Class提供的 removePersistentDomainForName 方法。
语法:
- (void)removePersistentDomainForName:(NSString *)domainName
示例:
NSString *strAppBundleId = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:strAppBundleId];
答案 9 :(得分:0)
如果您在单元测试中执行此操作,则可能需要将应用程序的状态保持在当前模拟器中,而不是每次运行单元测试时都无意中擦除它。实现此目的的一种方法是在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's 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()
}
}