2016-08-19 2 views
1

Когда я вызываю эту функцию, мое приложение получает сбой.
У меня была ошибка: [__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1].
Как я могу ее решить, пожалуйста, помогите, если вы знаете.Ошибка приложения при удалении данных NSUserDefault

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]; 
      } 
     } 
+0

Что вы пытаетесь очистить все пользователи по умолчанию? затем NSString * appDomain = [[NSBundle mainBundle] bundleIdentifier]; [[NSUserDefaults standardUserDefaults] removePersistentDomainForName: appDomain]; –

+0

извините mike Я попробую ваше предложение, но его не работает, приложение получает creash –

+0

[__NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [1] –

ответ

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 в словаре.

+0

Я пробовал этот код, не работая для меня, мое приложение получает крах –

+0

[__NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [1] –

+0

есть nsstring, bool, nsdata store в nsuserdefault –

0

попробуйте добавить ключи нужных записей в NSArray внутри цикла затем сделать removeObjectsForKeys: массив вне цикла

Это желательно не удалять записи при перечислении внутри для цикла

0

Мое решение для Ваш вопрос:

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

Спасибо, что остался этим братом. Я удалил эту строку. См. Мой ответ. – user3182143