54

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

私は電話をかけようとしました:

[NSUserDefaults resetStandardUserDefaults];

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

4

11 に答える 11

104

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

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

NSUserDefaultsクラスの詳細については、Appleドキュメントを参照してください。

または、iOSシミュレーターのデータだけが関係している場合は、iOSシミュレーター>コンテンツと設定のリセットを介してそれを行うことができます。

ここに画像の説明を入力してください

于 2012-03-12T18:29:08.873 に答える
53

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

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

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

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

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

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

于 2009-05-22T16:02:27.947 に答える
7

アプリのuserdefaultsに「書き込んだ」ものがすべてファイル内にあることがわかる場合があります。この.plistファイルを削除すると、次のように機能します。

user name/Library/Preferences/com.theAppYouAreHandling.plist
于 2012-05-09T05:25:34.270 に答える
7

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

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

于 2015-10-16T12:44:49.023 に答える
5

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

于 2009-05-22T22:00:48.037 に答える
4

Xcode6およびiOS8Simulatorまで、plistファイルの場所が変更されました。

次のディレクトリで*.plistを見つけました。

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

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

于 2014-10-16T11:48:54.317 に答える
3

迅速なバージョンは次のとおりです。

let domainName = NSBundle.mainBundle().bundleIdentifier!       
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName)
于 2015-10-03T06:45:31.333 に答える
2

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

Simulator -> Reset Content and Settings...
于 2017-05-28T17:42:43.863 に答える
0

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

構文:

- (void)removePersistentDomainForName:(NSString *)domainName

例 :

NSString *strAppBundleId = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:strAppBundleId];
于 2014-10-01T11:28:31.577 に答える
0

単体テストでこれを行う場合は、単体テストを実行するたびに誤ってアプリをワイプするのではなく、現在のシミュレーターでアプリの状態を維持することをお勧めします。これを行う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()
    }
}
于 2017-07-08T04:53:44.977 に答える
0

UserDefaultsは、の次のパスにありますFinder。削除してください。.plist

〜/ Users / <USER>/ Library / Developer / CoreSimulator / Devices / <DEVICE_ID>/data/Containers/Data/Application/ / Library/Preferences/ < <APP_ID>APP_BUNDLE_ID > .plist

置き換えるパスコンポーネント:

1. <USER> = MAC user name
2. <DEVICE_ID> = Device/Simulator Identifier, e.g., 999271B8-FAA6-41DE-9864-4111F422ED12
3. <APP_ID> = Application identifier, e.g., 69928AEF-BCD5-413A-B06F-BC4A07080D62
4. <APP_BUNDLE_ID> = Your apps bundle identifier, e.g., com.company.appname.plist
于 2021-09-13T14:19:07.780 に答える