如何在iPhone模拟器中重置NSUserDefaults数据?

时间:2009-05-22 15:32:33

标签: iphone ios cocoa-touch uikit nsuserdefaults

我已将NSUserDefault数据检索添加到我的应用程序,这非常好。但是为了进行测试,我想重置我添加到默认数据库的所有数据,以便当用户第一次启动应用程序时,所有数据都处于状态。

我试着打电话:

[NSUserDefaults resetStandardUserDefaults];

但这没有做任何事情。默认值仍然保存,可以检索。

10 个答案:

答案 0 :(得分:99)

你想要NSUserDefaults removePersistentDomainForName。这将删除应用程序的所有用户默认值:

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

有关NSUserDefaults课程的详情,请参阅Apple docs

或者,如果你关心的只是iOS模拟器中的数据,你可以通过 iOS模拟器>来做到这一点。重置内容和设置

enter image description here

答案 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()
    }
}