Способ получить тип возврата метода в Objective C? - PullRequest
3 голосов
/ 20 ноября 2010

Я пишу универсальный класс представления «Атрибут / редактор ключей» на iOS, и он проверяет тип ключа редактирования, используя, например, [objectForKey isKindOfClass:[NSDate class]].Я просто наткнулся на стену, когда понял, что потерпит неудачу, если objectForKey равно nil.Есть ли способ получить класс / тип возвращаемого значения для универсального свойства Objective C, даже если указанное свойство равно nil?Я знаю о method_getReturnType во время выполнения Objective-C, но это звучит как излишество для того, что мне нужно.

Ответы [ 4 ]

3 голосов
/ 20 ноября 2010

Вы не можете. Хотя информация о типе возврата для методов доступна, кодировка типа возврата для методов, которые возвращают объекты, просто @, что означает «ссылка на объект».

2 голосов
/ 20 ноября 2010

То, что вы просите, не имеет смысла.

Помните, что одно имя не идентифицирует метод.Объекты отвечают на эти сообщения (или нет);метод не существует один, только как часть объекта (или класса).

Не имея объекта, вы не можете сказать из него, что гипотетически отправит сообщение объекту.

ETA: Как получилось, что вы могли редактировать атрибуты чего-либо, но не иметь объекта для редактирования, чтобы проверить его свойства?Кажется, что у вас есть ошибка где-то еще.

Я знаю о method_getReturnType во время выполнения Objective-C, но это звучит как излишнее, что мне нужно.

Есть два пути.Если вы хотите поддерживать неформальные свойства (методы доступа, совместимые с KVC без объявления @property), это именно то, что вам нужно.Если вам нужны только формальные свойства (@property), используйте функцию property_getAttributes .

0 голосов
/ 20 ноября 2010

Я не знаю, откуда поступают ваши данные, но вы можете рассмотреть возможность замены nil с помощью NSNull, и это позволит вам получить свойства, подобные NSObject, для чего-то, что технически равно нулю

Но нулевая проверка становится более болезненной в заднице.

Идет от объекта! = Ноль до

(NSNull *) объект! = [NSNull null]

0 голосов
/ 20 ноября 2010

Не могли бы вы сначала проверить, чтобы убедиться, что objectForKey! = Nil, и продолжить проверку isKindOfClass?Если вы сначала убедитесь, что объект не равен нулю, вы можете легко проверить или безопасно выйти без каких-либо сбоев.

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