NSUserDefault 数据删除期间应用程序崩溃

App crashing during NSUserDefault data removal

当我调用这个函数时,我的应用程序崩溃了。
我收到此错误:[__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];
          }
      }  

请使用以下代码。应该对你有帮助

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 值。

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

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

我对你问题的解决方案是

NSUserDefaults *defs  = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [userDefaults dictionaryRepresentation];
for (id key in dict) {
    [dict removeObjectForKey:key];
}
[defs synchronize];