我使用+[NSUserDefaults standardUserDefaults]
來存儲應用程序設置。這由大約十幾個字符串值組成。是否可以永久刪除這些值而不是將其設置爲默認值?清除NSUserDefaults
回答
您可以刪除應用程序的持久域是這樣的:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
在斯威夫特3和更高:
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
這是類似於@samvermette的答案,但有點清潔IMO。
您是否嘗試過使用 - removeObjectForKey
?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
乾杯sbooth。非常感激。 – TonyNeallon 2009-02-13 10:16:06
任何方式來刪除所有現有的鍵的對象? – samvermette 2010-06-10 03:30:21
雖然我明白這似乎工作,爲什麼不是defunctPreference某種系統定義常量?我一定很緊張,將來有一天會停止工作。 – 2011-11-09 19:58:16
此代碼重置默認爲註冊域名:
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
換句話說,它removeObjectForKey
您在該應用註冊過的每一個關鍵。
積分肯Thomases這個蘋果開發者論壇thread.
如果您在開發時需要它,您也可以重置您的模擬器,刪除所有NSUserDefaults
。
iPhone模擬器 - >重置內容和設置...
記住,這也將刪除模擬器所有的應用程序和文件。
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
擴大對@ folse的答案......我相信一個更正確的實施將...
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
for (NSString *key in [defaultsDictionary allKeys]) {
NSLog(@"removing user pref for %@", key);
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
...調用NSUserDefault的persistentDomainForName:方法。正如文檔所述,方法「返回包含指定持久域中的鍵和值的字典」。調用dictionaryRepresentation:相反,將返回一個可能包含其他設置的字典,因爲它適用於更廣的範圍。
如果您需要過濾掉任何要重置的值,那麼通過遍歷鍵是實現它的方法。很顯然,如果你只是不加考慮地爲應用程序設置所有的前綴,那麼上面提到的其他方法之一是最有效的。
如果需要重置的應用程序設置爲nsuserdefault以訪問麥克風(我的情況),一個簡單的解決方案是從Anthony McCormick(Iphone - How to enable application access to media on the device? - ALAssetsLibraryErrorDomain Code=-3312 "Global denied access")得到的答案。
設備上,進入設置>通用>還原>還原位置警告
以上所有的答案都非常重要,但如果有人仍無法重置已刪除的應用程序的userdefaults,那麼你可以重新設置內容設置你模擬器,它會工作。
我發現這一點:
osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"
來源:https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
這裏是斯威夫特了答案:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
注:這個答案已經爲斯威夫特被更新了。
怎麼樣在一條線上?
擴展@Christopher Rogers答案 - 接受的答案。
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
是的,有時你可能需要synchronize
它,
[[NSUserDefaults standardUserDefaults] synchronize];
我創建了這樣做的方法,
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
斯威夫特?
隨着swift更容易。
extension UserDefaults {
class func clearDefaults() -> Bool {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return false }
self.standard.removePersistentDomain(forName: aValidIdentifier)
self.standard.synchronize()
return true
}
}
和使用:
if UserDefaults.clearDefaults() {
//Done!
} else {
//Not.
}
這是一個錯誤或什麼,但removePersistentDomainForName
,同時清除所有NSUserDefaults
值是行不通的。
所以,更好的選擇是重置PersistentDomain
,並且您可以通過以下方式做到:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
在斯威夫特:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
我愛擴展時,他們使代碼更清潔:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
試試這個,它適合我。
的代碼單線
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
- 1. 在設定的時間清除NSUserDefaults
- 2. 問題NSUserDefaults standardUserDefaults沒有清除
- 3. 如何清除更新的應用程序上的NSUserDefaults
- 4. 在指定的時間段後清除NSUserDefaults iPhone
- 5. 爲什麼在創建UIWebView時清除NSUserDefaults會導致EXC_CRASH?
- 6. 從NSUserdefaults中刪除NSDictionary
- 7. JPA createQuery和清除/清除
- 8. Exchange 365擦除郵箱(清除清除)
- 9. 收集清除源集合時清除
- 10. plone.app.caching和settings清除清除緩存
- 11. Java Arraylist清除:清除()如何工作
- 12. 元素沒有清除功能清除
- 13. 如果輸入清除,清除表格
- 14. GMSMapView清除不清除內存
- 15. 會話清除時列表清除
- 16. UITableView不從NSUserDefaults刪除記錄
- 17. 刪除macOS上的App/NSUserDefaults數據
- 18. NSUserDefaults在視圖之間被擦除
- 19. 去除數組對象NSUserDefaults的中
- 20. 如何清除recyclerView清單?
- 21. 清除清單 - 清除的數據返回
- 22. 清除水垢
- 23. 清除ISupportIncrementalLoading
- 24. 清除UIPasteBoard
- 25. 清除InkCanvas [UWP]
- 26. 清除anonymousIdentification?
- 27. PropertyGrid清除值
- 28. 清除代理
- 29. 清除CGContext行
- 30. 清除表jquery
[**從NSUserDefaults的刪除所有鍵**](http://stackoverflow.com/questions/6797096/delete-all-keys-from-a-nsuserdefaults -dictionary-iphone) – Hemang 2013-08-30 13:33:25