NSUserDefaults
アプリにデータ検索を追加しました。これは非常に便利です。ただし、テストのために、デフォルトデータベースに追加したすべてのデータをリセットして、ユーザーがアプリを最初に起動したときの状態になるようにします。
私は電話をかけようとしました:
[NSUserDefaults resetStandardUserDefaults];
しかし、それは何もしません。デフォルトは引き続き保存され、取得できます。
NSUserDefaults
アプリにデータ検索を追加しました。これは非常に便利です。ただし、テストのために、デフォルトデータベースに追加したすべてのデータをリセットして、ユーザーがアプリを最初に起動したときの状態になるようにします。
私は電話をかけようとしました:
[NSUserDefaults resetStandardUserDefaults];
しかし、それは何もしません。デフォルトは引き続き保存され、取得できます。
あなたが欲しいNSUserDefaults removePersistentDomainForName
。これにより、アプリケーションのすべてのユーザーデフォルトが削除されます。
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
NSUserDefaults
クラスの詳細については、Appleドキュメントを参照してください。
または、iOSシミュレーターのデータだけが関係している場合は、iOSシミュレーター>コンテンツと設定のリセットを介してそれを行うことができます。
最も簡単な方法は、シミュレーターからアプリを削除することです。実際の電話からアプリを削除するのと同じように、アイコンが振動し始めるまでタップ(クリック)して押し続けます。これにより、すべてのアプリデータが削除され、次にXcodeからインストールするときは、初めてのようになります。
保持する必要のある他のアプリデータがある場合は、いくつかのオプションがあります。
1つの方法は、デフォルトの各キーにremoveObjectForKey:を呼び出すデバッグコードを作成することです。
もう1つは、シミュレータコピーがインストールされているディレクトリを見つけて、設定を含むファイルを削除することです。これを使用してアプリを見つけます。
ls -ld ~/Library/Application\ Support/iPhone\ Simulator/User/Applications/*/*.app
アプリへのフルパスには、名前がUUIDのディレクトリが含まれます。そのディレクトリで、Library/Preferencesで設定ファイルを探します。それを削除すると、ユーザー設定はなくなります。
アプリのuserdefaultsに「書き込んだ」ものがすべてファイル内にあることがわかる場合があります。この.plistファイルを削除すると、次のように機能します。
user name/Library/Preferences/com.theAppYouAreHandling.plist
Swift 2.0では、次の1行で、アプリのすべてのNSUserDefaultsがリセットされます。
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
実際、これはすべての状況に適しているわけではありませんが、シミュレーターに価値のある情報を保持していないため、シミュレーター自体から、iPhoneメニューからコンテンツと設定をリセットするだけです。
Xcode6およびiOS8Simulatorまで、plistファイルの場所が変更されました。
次のディレクトリで*.plistを見つけました。
[1]/Users/SOME-USERNAME/Library/Developer/CoreSimulator/Devices/SOME-DEVICE-ID/data/Library/Preferences/SP.UserDefaultsTest.plist
見つかったファイルをパス[1]から手動で削除すると、NSUserDefaultsはなくなります。
迅速なバージョンは次のとおりです。
let domainName = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName)
シミュレータのトップメニュー:
Simulator -> Reset Content and Settings...
NSUserDefaultsクラスで使用可能なremovePersistentDomainForNameメソッドを使用できます。
構文:
- (void)removePersistentDomainForName:(NSString *)domainName
例 :
NSString *strAppBundleId = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:strAppBundleId];
単体テストでこれを行う場合は、単体テストを実行するたびに誤ってアプリをワイプするのではなく、現在のシミュレーターでアプリの状態を維持することをお勧めします。これを行う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()
}
}
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