2012-08-17 2 views
2

Мне нужно получить класс аргумента метода во время выполнения.Получить класс аргументов метода в Objective-C

Существует метод

- (const char *)getArgumentTypeAtIndex:(NSUInteger)idx; 

в NSMethodSignature, но он возвращает только @, если это объект. Мне нужно получить класс этого объекта, на самом деле определить, является ли этот объект NSArray или нет. Каковы возможности этого достичь?

ответ

3

Лонг спине я попытался this.So потребовалось некоторое время, чтобы ответить для поиска кода , В любом случае, это информация.

Возвращаемые данные getArgumentTypeAtIndex и methodReturnType для класса NSMethodSignature будут «Строка C, кодирующая возвращаемый тип метода в кодировке типа Objective-C». - Согласно документам.

Итак, вам нужно проверить перенастроенные данные о символах и найти соответствующий тип в следующей таблице.

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html

Я думаю, проверяя, что таблица кодировок дает ответ!

Happy Coding :)

+1

Обратите внимание, что конкретные классы не кодируются; только тот факт, что аргумент является объектом (обозначается буквой '@'). –

+1

Так можно каким-то образом получить конкретное (даже если пользовательское) имя класса? – Ephraim

2

Вы попробовали?

if ([object_you_wanna_check isKindOfClass:([NSArray class])]) 
+0

Мне не нужно проверять класс объекта. Мне нужно проверить аргументы и классы метода объекта. Итак, в основном получим подпись метода: NSMethodSignature * sig = [self methodSignatureForSelector: selector]; а затем получить все аргументы и определить их классы. Как это сделать? –

+1

Ольга, что информация не хранится в среде выполнения объекта, она хранит только размер аргументов (так что он может быть правильно передан NSInvocation). То, что вы имеете в виду, должно определяться статическим анализатором, а не кодом времени исполнения. –