web-dev-qa-db-ja.com

すべてのUserDefaultsデータを削除する方法は? -Swift

アプリからすべてのUserDefaultsデータを削除するには、次のコードを使用します。

let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)

print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)

しかし、私は印刷ラインから10を得ました。 0であってはいけませんか?

27
Zizoo

問題は、UserDefaultsの内容を消去した直後に印刷しているのに、手動で同期していないことです。

let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)

これでうまくいくはずです。

システムは定期的にuserDefaultsを自動的に同期するため、通常は手動でsynchronizeを呼び出す必要はありませんが、変更をすぐにプッシュする必要がある場合は、synchronize呼び出しを介して強制的に更新する必要があります。

ドキュメントにはこれが記載されています

このメソッドは定期的な間隔で自動的に呼び出されるため、自動同期を待つことができない場合(たとえば、アプリケーションが終了しようとしている場合)、またはユーザーのデフォルトをディスク上にあるものに更新する場合にのみ、このメソッドを使用してください変更を加えていません。

60
Lefteris

この回答はここにあります https://stackoverflow.com/a/6797133/563381 ですが、ここではちょうどSwiftにあります。

func resetDefaults() {
    let defaults = UserDefaults.standard
    let dictionary = defaults.dictionaryRepresentation()
    dictionary.keys.forEach { key in
        defaults.removeObject(forKey: key)
    }
}
27
Ryan Poolos