Вопрос

У меня такая ошибка - *Заканчивающее приложение из-за исключения Uncement 'nsinvalidargumentException', причина: **-[nscfdictionary initwithobjects: forkeys: count:]: попытка вставить значение NIL в объекты [0] (ключ: поиск) '

Затем я попробовал код ниже

    if (Obj == (id)[NSNull null])  //Obj is an id 
{
    NSLog(@" Obj is (id)[NSNull null]");    
}
else if (Obj == nil)
{
    NSLog(@"Obj is nil");   
} 
else if (Obj == NULL)
{
    NSLog(@"Obj is NULL");  
} 
else
{
    NSLog(@"Obj is something else");
}

searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];

И я получил сообщение NSLOG как «obj - это нуль».

Но когда я использовал тот же код выше, когда OBJ был NSString, и мое приложение было прекращено из -за значения NIL, я получил сообщение NSLOG как «OBJ IS (ID) [NSNULL NULL]».

Каковы различия между нулевым, нулевым и [nsnull nil]?

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

Спасибо :-)

Это было полезно?

Решение

NULL является исходным значением C-стиля, указанному указателю, которое считается, что не указывает на явный адрес. Как правило, это просто означает «unset» или как Сентинельное значение.

char * oldstring = NULL;

nil Является ли объективная версия того же самого, что применяется к ссылкам на объект obj-c:

NSString * str = nil;
id foo = nil;

Они оба определены как равные нулевым значениям, и хотя вы мог Используйте их взаимозаменяемо, первое видно в основном в OBJ-C для традиционных указателей (например, настройки void * контекст указатели на нуль) и nil используется для всех ссылок OBJ-C объектов.

Разница существует, потому что, хотя синтаксис OBJ-C происходит на вершине C, дизайн языка более высокий уровень, и его объектные идентификаторы концептуально не одинаково как просто «указатели». Отсюда и создание специального стража для них.

[NSNull null] это объект это предназначено использование в некоторых случаях (например, вставка в коллекции), где желаемое значение «не значения», но фактическое nil не допускается, а объект должен использоваться.

Обратите внимание, что nil а также NSNull строка очень аналогично: nil строка как (null), а также NSNull в качестве <null>.

Другие советы

[NSNull null] это обертка для nil ценность, которую вы хотите вставить в коллекцию, если вы хотите.

NSNULL Класс ссылка.

Вы также можете проверить, если ссылка на объект nil просто с ==.

Также nil определяется как : #define nil NULL и является объективным C, эквивалентным для C NULL.

Ноль для указателей объектов

NULL для не указателей

Nsnull null] - это объект для представления «нуля» для использования в тех случаях, когда значения NIL не допускаются (как указано Винсом, как в коллекциях, например, NSArray и NSDictionary)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top