1

当我调用此函数时,我的应用程序崩溃了。
我收到了这个错误:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1].
如果你知道,我该如何解决它请帮忙。

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
      NSDictionary *dict = [defs dictionaryRepresentation];
      for (id key in dict)
      {
          NSObject * object = [dict objectForKey:key];
          if(object != nil)
          {
              [defs removeObjectForKey:key];
              [defs synchronize];
          }
      }  
4

3 回答 3

2

请使用以下代码。它应该可以帮助你

NSString *applicationDomain = [[NSBundle mainBundle] bundleIdentifier];

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:applicationDomain];

你也可以使用

    NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
    for (NSString *key in [defaultsDictionary allKeys]) {
                        [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
    }

[[NSUserDefaults standardUserDefaults] synchronize]; //outside loop.

注意:您提到的崩溃与字典中的 setValue ForKey 有关。请用户断点并查看您在字典中插入 nil 值的位置。

于 2016-08-19T09:40:19.880 回答
0

尝试将所需条目的键添加到循环内的 NSArray 中,然后在循环外执行 removeObjectsForKeys:array

在 for 循环中枚举时最好不要删除条目

于 2016-08-19T10:19:55.200 回答
0

我对您的问题的解决方案是

NSUserDefaults *defs  = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [userDefaults dictionaryRepresentation];
for (id key in dict) {
    [dict removeObjectForKey:key];
}
[defs synchronize];
于 2016-08-19T10:42:37.363 回答