Подтвердить что ты не робот

Проверьте, является ли NSDictionary Null?

Я пробовал несколько способов. Я знаю, что словарь NULL, поскольку консоль также распечатывает, когда я ломаю там. Но когда я положил его в if(), он не запускается.

([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]
4b9b3361

Ответ 1

Похоже, у вас свисающий или дикий указатель.

Вы можете рассматривать объекты Objective-C как указатели на структуры.

Затем вы можете сравнить их с NULL или с другими указателями.

Итак:

( myDict == NULL )

и

( myDict == [ NSNull null ] )

оба действительны.

Первый проверяет, есть ли указатель NULL. NULL обычно определяется как void * со значением 0.
Обратите внимание, что для объектов Objective-C мы обычно используем nil. nil также определяется как void * со значением 0, поэтому он равен NULL. Это просто здесь, чтобы обозначить указатель NULL для объекта, а не стандартный указатель.

Второй сравнивает адрес myDict с экземпляром singleton класса NSNull. Итак, вы здесь сравниваете значения двух указателей.

Итак, чтобы быстро возобновить:

NULL == nil == Nil == 0

И как [ NSNull null ] является допустимым экземпляром:

NULL != [ NSNull null ]

Теперь об этом:

( [ myDict count ] == 0 )

Он может упасть, если у вас есть дикий указатель:

NSDictionary * myDict;

[ myDict count ];

Если не используется ARC, он обязательно сбой, потому что переменная myDict не была инициализирована и может фактически указывать на что-либо.

Может также произойти сбой, если у вас есть висячий указатель:

NSDictionary * myDict;

myDict = [ [ NSDictionary alloc ] init ];

[ myDict release ];
[ myDict count ];

Затем вы попытаетесь отправить сообщение на освобожденный объект.
Отправка сообщения в nil/NULL всегда действительна в Objective-C.

Так что это зависит, если вы хотите проверить, есть ли словарь nil, или если он не имеет значений (поскольку действительный экземпляр словаря может быть пустым).

В первом случае сравните с nil. В противном случае проверяет, равен ли счет 0, и убедитесь, что экземпляр все еще действителен. Может быть, вы просто забыли что-то удержать.

Ответ 2

if (TheDict == (NSDictionary*) [NSNull null]){

//TheDict is null
    }
else{
//TheDict is not null

}

Ответ 3

Все вышеперечисленное не работает для меня, но это

if([mydict isKindOfClass:[NSNull class]])
{
   NSLog("Dic is Null")
}
else
{
   NSLog("Dic is Not Null")  
}

Работал для меня

Ответ 4

Чтобы проверить, есть ли у словаря нулевые или NULL-данные, вы можете проверить значение [количество слов], которое будет возвращать 0 во всех случаях

Ответ 5

if([NSNull null] != [serverResponseObject objectForKey:@"Your_Key"])
{
//Success
}