Я использую функции времени выполнения, чтобы получить тип свойства (спасибо eJames за помощь в выяснении этого способа).
Строка атрибута свойства выглядит следующим образом:
T @ "NSArray", &, Vstuff
Мне нужно проверить, является ли тип свойства массивом, на данный момент я делаю это так:
- (BOOL)valueForKeyIsArray:(NSString *)key fromTagret:(id)target
{
NSString *lowerCaseKey = [self convertToKVCKey:key];
objc_property_t property = class_getProperty([target class], [lowerCaseKey UTF8String]);
NSString *propertyAttrs = [NSString stringWithUTF8String:property_getAttributes(property)];
NSString *encodedType = @"@\"NSArray\"";
NSRange range = [propertyAttrs rangeOfString:encodedType options:NSLiteralSearch];
return range.location != NSNotFound;
}
Но поскольку Apple может изменить строку определения типа в любое время, я хотел бы сгенерировать эту строку типа @ "NSArray". Я попробовал это с @encode (), но это не сработало:
NSString *encodedType = [NSString stringWithUTF8String:@encode(NSArray *)];
Так как я могу сгенерировать эту строку типа? Или есть лучший способ проверить, содержат ли атрибуты этого свойства тип массива?