Лучший способ проверить, является ли объект класса ноль? - PullRequest
0 голосов
/ 05 декабря 2010

В цели C, что является лучшим способом сделать это:

if ([response class] == [nil class])

ответом является NSDictionary или NSMutableDictionary

Код работает, но я получаю "Invalid receiver type 'void *' or "comparison of distinct Objective-C types 'Class' and 'struct NSMutableDictionary *' lacks a cast" предупреждающих сообщений

Спасибо

Ответы [ 3 ]

6 голосов
/ 05 декабря 2010

Если вы действительно хотите проверить [response class], вместо самого значения response, вы захотите использовать

if ([response isKindOfClass:[NSNull class])

Если вы хотите проверить, если response само по себе nil, я описываю хороший способ сделать это в этом ответе на похожий вопрос.

3 голосов
/ 05 декабря 2010

Класс объекта не может быть nil, если вы не испортили немного времени выполнения. Все допустимые объекты должны быть экземплярами допустимого класса. Вы пытаетесь сделать что-то вроде следующего?

 if (!response) {
    // 'response' is nil
 } else if ([response isKindOfClass:[NSMutableDictionary class]]) {
    // response is an NSMutableDictionary
 } else if ([response isKindOfClass:[NSDictionary class]]) {
    // response is an NSDictionary
    // (or an NSMutableDictionary if you remove the above 'if')
 }
2 голосов
/ 06 декабря 2010

Так как вы упомянули либо NSDictionary или NSMutableDictionary и, похоже, тестируете для экземпляров вида ...

isKindOfClass: будет определять, является ли получатель экземпляром классауказано.Это включает в себя подклассы.

Обратите внимание, что вы не можете использовать это, чтобы определить, является ли словарь изменчивым или неизменным, так как словари являются экземплярами NSCFDictionary, который является подклассом `NSMutableDictionary.

Это очень нарочно.

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