Как проверить, является ли BOOL нулевым? - PullRequest
4 голосов
/ 03 мая 2010

Есть ли способ проверить, является ли значение NULL / Nil, прежде чем присваивать его BOOL?

Например, у меня есть значение в NSDictionary, которое может иметь значение TRUE / FALSE /NULL

mySTUser.current_user_following = [[results objectForKey:@"current_user_following"]boolValue];

Когда значение равно NULL, я получаю следующую ошибку

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSNull boolValue]: unrecognized selector sent to instance

Я хотел бы иметь возможность обрабатывать случай NULL.

Ответы [ 2 ]

10 голосов
/ 03 мая 2010

Вы должны проверить [NSNull null]:

id vUser = [results objectForKey:@"current_user_following"];

if (vUser != [NSNull null]) {
    // do stuff...
}
else {
    // handle the case appropriately...
}
5 голосов
/ 03 мая 2010

Вы можете сначала протестировать, а затем назначить условно, например, что-то вроде следующего:

if (NSValue* val = [results objectForKey:@"current_user_following"]) {
    mySTUser.current_user_following = [val boolValue];
}

Это:

  • избегает вызова objectForKey: дважды, сохраняя результат в переменной
  • ограничивает область действия переменной оператором if
  • работает, потому что nil эквивалентно 0
  • выполняет оператор присваивания, только если val не nil

Чтобы дополнительно проверить значение NSNull, вам нужно добавить еще один тест, заданный ChristopheD, но я спрашиваю, действительно ли здесь требуется NSNull - YES / NO должно быть достаточно для описание типа "следует" .
Если у вас нет полезного значения для ключа, вы можете просто удалить его из словаря или вообще не вставлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...