我使用+[NSUserDefaults standardUserDefaults]来存储应用程序设置。它由大约12个字符串值组成。是否可以永久删除这些值,而不是将它们设置为默认值?
当前回答
注意:Swift也更新了这个答案。
把它写在一行上怎么样?
扩展@Christopher Rogers的回答——公认的答案。
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
是的,有时候你可能需要同步它,
[[NSUserDefaults standardUserDefaults] synchronize];
我创建了一个方法,
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
迅速?
有了迅捷,它就更容易了。
extension UserDefaults {
class func clean() {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return }
standard.removePersistentDomain(forName: aValidIdentifier)
standard.synchronize()
}
}
和用法:
UserDefaults.clean()
其他回答
如果你在开发时需要它,你也可以重置你的模拟器,删除所有的NSUserDefaults。
iOS模拟器->重置内容和设置…
请记住,它也会删除模拟器上的所有应用程序和文件。
如果应用程序设置需要重置是nsuserdefault访问麦克风(我的情况下),一个简单的解决方案是回答从安东尼麦考密克(Iphone -如何启用应用程序访问设备上的媒体?- ALAssetsLibraryErrorDomain Code=-3312 "Global denied access")。
>常规>复位>复位位置警告
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
以下是Swift的答案:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
你试过使用-removeObjectForKey吗?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
推荐文章
- 更改UITextField和UITextView光标/插入符颜色
- 'Project Name'是通过优化编译的——步进可能会表现得很奇怪;变量可能不可用
- 如何设置回退按钮文本在Swift
- 模拟器慢动作动画现在打开了吗?
- 如何为TableView创建NSIndexPath
- 滑动删除和“更多”按钮(就像iOS 7的邮件应用程序)
- 如何比较两个nsdate:哪个是最近的?
- 使UINavigationBar透明
- 如何改变推和弹出动画在一个基于导航的应用程序
- 删除/重置核心数据中的所有条目?
- Swift to Objective-C头未在Xcode 6中创建
- setNeedsLayout vs. setNeedsUpdateConstraints和layoutIfNeeded vs. updateConstraintsIfNeeded
- 不区分大小写的比较
- 我怎么能得到一个uiimage的高度和宽度?
- 我如何模仿地图应用程序的底部表格?