Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UserDefaults 
:(
    Опции темы
estra
Дата 24.7.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Как определить, есть ли в UserDefaults ключ или нет?

Если ключ типа NSString, то понятно

Код

NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
NSString *s = [u objectForKey:@"key"];
if (![s length]) ...


а как быть в случае, если нужно определить наличие ключа типа BOOL?
PM MAIL   Вверх
Bitter
Дата 24.7.2012, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



ключ не может быть типа бул, потому что бул это не объект
PM MAIL ICQ Skype   Вверх
estra
Дата 24.7.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



тогда по другому

допустим в UserDefaults записано значение следующим образом

Код

[u setBool:NO forKey:@"key"]


как проверить есть ли такой ключ или нет. если делать по аналогии с первым постом

Код

NSString *s = [u objectForKey:@"key"];
if (![s length]) ...


то на строчке с условием приложение "падает"

наверное надо

Код

BOOL s = [u boolForKey:@"key"];


но что оно вернет если такой ключ еще не создан?

Это сообщение отредактировал(а) estra - 24.7.2012, 23:10
PM MAIL   Вверх
Bitter
Дата 25.7.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Хм. Я так понял под ключем Вы имеете в виду объект, который ассоциирован с ключем... Потому что в вашем случае ключ это @"key", а никак не строка или тем более бул.
В общем когда вы вызываете метод setBool для юзердефолтса, то он заносит объект класса NSNumber, который создает так [NSNumber numberWithBool:]. Соответственно в словаре хранится объект NSnumber для ключа @"key".
Далее. Если вы получаете объект по указанному ключу, то объект этот вам вернется как id. Но это в любом случае объект. 
Если такого ключа в словаре нет, то вам вернется nil. Кроме того не может быть ситуации когда ключ есть, а обекта для него нет, так как nil нельзя хранить в словаре. То есть если есть ключ - есть и значение, иначе вы получите nil

Добавлено через 3 минуты и 15 секунд
Да, кстати - определение наличия объекта вот таким образом
Код

NSString *s = [u objectForKey:@"key"];
if (![s length]) ...

это чистой воды ###код, так как Вы вызываете метод length без надобности
Правильная проверка такая:
Код

if ([userDefaults objectForKey:@"key"]) { // объект есть


P.S. не называйте переменные одной буквой, за это надо отбивать руки!
PM MAIL ICQ Skype   Вверх
estra
Дата 25.7.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Спасибо за разъяснения!

1 буква, это для примера, чтобы много не писать)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.