2013-06-04 4 views
16

Среди параметров, которые я сохраняю в NSUserDefaults, является необязательным объектом, который не имеет смысла иметь готовое по умолчанию значение. Пока пользователь не установит значение для этого объекта, приложение генерирует ошибку «[NSKeyedUnarchiver initForReadingWithData:]: data NULL», когда я удаляю файлы из NSUserDefaults. Я игнорирую ошибку, и приложение работает отлично.[NSKeyedUnarchiver initForReadingWithData:]: данные NULL

Есть ли наилучшая практика, чтобы избежать этого, и это волнение?

+0

Если вы не хотите значение по умолчанию для этого ключа, а затем просто не создавайте ключ в первую очередь. Создавайте его только тогда, когда пользователь устанавливает значение. – rdelmar

+0

Но при запуске приложения я не знаю, было ли значение ранее задано, пока не проверю NSUserDefaults. –

ответ

22

Я не уверен, что именно вы разархивировав, но если вы можете посмотреть на ключи первых, перед вами разархивировать, вы могли бы сделать это следующим образом:

if ([[[NSUserDefaults standardUserDefaults] dictionaryRepresentation].allKeys containsObject:@"keyForNonMandatoryObject"]) { 
     // unarchive the value here 
    } 
+23

Почему бы просто не сделать: 'if ([[NSUserDefaults standardUserDefaults] objectForKey: @" keyForNonMandatoryObject "]) {'? Зачем нужен весь словарь для проверки только одного ключа? – rmaddy

+0

Блестящий! Это отлично работает, и решение, предлагаемое швами @maddy, немного более упорядочено. Благодарю. –

+0

@rmaddy, brain spazz Думаю, я думал, что мне нужно избегать самого объекта, поэтому он не получил ошибку, но, как вы правильно предположили, просто проверяя, существует ли этот объект, не будет возникать проблема с попыткой для разблокирования несуществующего объекта. – rdelmar

Смежные вопросы