从NSUserDefaults获取密钥的所有方法都会从应用程序本身以外的域(例如,NSGlobalDomain)返回大量密钥。我只想要我的应用程序设置的键和值。这对于调试和验证没有孤立密钥等非常有用。
我可以忽略那些不是我的钥匙(如果我知道所有这些钥匙 - 在开发期间我可能设置了我不再使用的钥匙),但可能存在钥匙碰撞其他域名,我不会看到我的应用程序的价值。
其他讨论建议查看与该应用相关联的字典文件,但这不是很优雅。
如何才能从NSUserdefaults获取我的应用程序密钥?
答案 0 :(得分:0)
优雅的方法
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *bundleIdentifier = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleIdentifierKey];
NSDictionary *dict = [defaults persistentDomainForName:bundleIdentifier];
文件方法:
NSString *bundleIdentifier = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"];
NSString *path = [NSString stringWithFormat:@"~/Library/Preferences/%@.plist",bundleIdentifier];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:[path stringByExpandingTildeInPath]];
NSArray *keys = [dict allKeys];
使用沙盒进行测试。
答案 1 :(得分:0)
Marek's代码已更新为Swift 5:
//Initiate select2 plugin on users
$('#users').select2()
//global var for select 2 label
var select2label
$(document).ready(function() {
$("#ShareThisForm").validate({
ignore: ".note-editor *", //ignore summernote validation
rules: {
"users[]": {
required: true
},
body: {
required: true,
},
},
errorPlacement: function(label, element) {
if (element.hasClass('select2bs4')) {
label.insertAfter(element.parent()).addClass('mt-2 text-danger');
select2label = label
} else {
label.insertAfter(element).addClass('mt-2 text-danger');
}
},
submitHandler: function(form) {
//submit modal form
},
});
});
//watch the change on select - if label exist then remove it
$('#users').on("change", function(e) {
if (select2label) {
select2label.remove(); //remove label
}
});