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