web-dev-qa-db-ja.com

iPhoneシミュレーターでNSUserDefaultsデータをリセットするにはどうすればよいですか?

NSUserDefaultデータ取得をアプリに追加しました。これは非常に便利です。しかし、テストのために、デフォルトデータベースに追加したすべてのデータをリセットして、ユーザーがアプリを初めて起動したときにすべてが状態になるようにします。

私は電話しようとしました:

[NSUserDefaults resetStandardUserDefaults];

しかし、それは何もしません。デフォルトはまだ保存されており、取得できます。

51
Thanks

最も簡単な方法は、シミュレーターからアプリを削除することです。アイコンが振動し始めるまでタップ(クリック)して長押しすることで、実際の電話からアプリを削除するのと同じです。これにより、すべてのアプリデータが削除され、Xcodeから次回インストールするときは初めてのようになります。

保持する必要がある他のアプリデータがある場合は、いくつかのオプションがあります。

1つの方法は、各デフォルトキーでremoveObjectForKey:を呼び出すデバッグコードを用意することです。

もう1つは、シミュレータコピーがインストールされているディレクトリを見つけて、設定を含むファイルを削除することです。これを使用してアプリを見つけます。

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

アプリへのフルパスには、名前がUUIDのディレクトリが含まれます。そのディレクトリで、ライブラリ/設定で設定ファイルを探します。それを削除すると、ユーザー設定がなくなります。

51
Tom Harrington

NSUserDefaults removePersistentDomainForName。これにより、アプリケーションのすべてのユーザーデフォルトが削除されます。

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

NSUserDefaultsクラスの詳細については、 Apple docs を参照してください。

または、iOSシミュレーターのデータだけが必要な場合は、iOSシミュレーター>コンテンツと設定のリセットでできます。

enter image description here

99
memmons

あなたはアプリのユーザーデフォルトに「書いた」ものがすべてファイル内にあることがわかるかもしれません。この.plistファイルは削除されます:

user name/Library/Preferences/com.theAppYouAreHandling.plist
6
Jiulong Zhao

実際、これはすべての状況に適しているわけではありませんが、シミュレーターに価値の情報を保持していないため、シミュレーター内からiPhoneメニューからコンテンツと設定をリセットします。

5
mmc

Swift 2.0では、次の1行はアプリのすべてのNSUserDefaultsをリセットします。

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

5
dane

Xcode 6およびiOS 8シミュレーターで、plistファイルの場所が変更されました。

次のディレクトリに* .plistが見つかりました。

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

パス[1]から見つかったファイルを手動で削除すると、NSUserDefaultsはなくなります。

3
sys4tron

シミュレーターのトップメニューで:

Simulator -> Reset Content and Settings...
2
Andrey

Swiftバージョン:

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

ユニットテストでこれを行っている場合、ユニットテストも実行するたびに誤って消去するのではなく、現在のシミュレーターでアプリの状態を維持することができます。これを行う1つの方法は、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()
    }
}
0
qix

NSUserDefaultsクラスで利用可能なremovePersistentDomainForNameメソッドを使用できます。

構文:

- (void)removePersistentDomainForName:(NSString *)domainName

例:

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