NSUserDefaults:如何只获得我设置的密钥

时间:2017-01-22 10:44:34

标签: macos nsuserdefaults

从NSUserDefaults获取密钥的所有方法都会从应用程序本身以外的域(例如,NSGlobalDomain)返回大量密钥。我只想要我的应用程序设置的键和值。这对于调试和验证没有孤立密钥等非常有用。

我可以忽略那些不是我的钥匙(如果我知道所有这些钥匙 - 在开发期间我可能设置了我不再使用的钥匙),但可能存在钥匙碰撞其他域名,我不会看到我的应用程序的价值。

其他讨论建议查看与该应用相关联的字典文件,但这不是很优雅。

如何才能从NSUserdefaults获取我的应用程序密钥?

2 个答案:

答案 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
  }
});