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

时间:2016-08-19 09:33:37

标签: ios objective-c iphone nsuserdefaults iphone-sdk-4.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];
          }
      }  

3 个答案:

答案 0 :(得分:2)

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

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

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

您也可以使用

Info.plist

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我的问题解答是

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