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




xcode userdefaults 削除 (8)

私はかなり良いです私のアプリケーションにNSUserDefaultデータの取得を追加しました。 しかし、テストのために、デフォルトデータベースに追加したすべてのデータをリセットしたいので、ユーザーが初めてアプリケーションを起動したときの状態になります。

私は電話しようとした:

[NSUserDefaults resetStandardUserDefaults];

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


最も簡単な方法は、アイコンを振動させるまでタップ(クリック)して保持するように、スマートフォンからアプリを削除するのと同じように、アプリをシミュレータから削除することです。 これにより、すべてのアプリケーションデータが削除され、次回Xcodeからインストールすると、初めてのようです。

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

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

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

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

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


ここには迅速なバージョンがあります:

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

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

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

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

また、iOS Simulatorのデータが問題である場合は、 iOS Simulator> Reset Content and Settingsを使用してください


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

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

構文:

- (void)removePersistentDomainForName:(NSString *)domainName

例:

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

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

Simulator -> Reset Content and Settings...

あなたは、アプリケーションのuserdefaultsに "書かれた"ものがすべてファイル内にあることを知るかもしれません。この.plistファイルは削除されます:

user name/Library/Preferences/com.theAppYouAreHandling.plist

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はなくなりました。







nsuserdefaults