сравнивая NSCFString и NSCFBoolean - PullRequest
4 голосов
/ 10 марта 2011

Я использую SBJsonParser для анализа JSON. Входные данные могут быть 0 или строкой (например, a829d901093), и если он равен нулю, возвращается NSCFBoolean, если возвращается его строка NSCFString. Как я могу сказать, какой возвращается? Спасибо!

1 Ответ

8 голосов
/ 10 марта 2011

Назвать их внутренними бесплатными именами - вот что сбивает с толку.Если вы называете их NSNumber и NSString (как они перечислены в документации), тогда ответ ясен:

if ([value isKindOfClass:[NSNumber class]]) { ... }

РЕДАКТИРОВАТЬ : @Magnus указывает, что этоне очевидно, что NSCFBoolean isa NSNumber для их поиска.Это правда.Для меня это очень очевидно, потому что я знаю систему типов Core Foundation и знаю, что означают классы бесплатных мостов и как они реализованы (это один из самых крутых приемов во всем Какао IMO).Но что, если ты не знал этих вещей?Это все еще не проблема.

  • В отладчике посмотрите список переменных и разверните переменную, которая вам нужна.Его первым «членом» станет суперкласс.Expand.Продолжайте, пока не найдете класс, который вы знаете.

  • Кроме того, вы можете ходить по суперклассам, используя NSStringFromClass([object superclass]).Продолжайте отмечать superclass столько раз, сколько вы хотите проверить.

...