У меня есть пользовательский класс, как показано ниже:Может быть, имя объекта ObjectType в NSArray?
@interface TestObject : NSObject
@property (nonatomic, retain) NSArray<ObjA *> *obja;
@property (nonatomic, retain) NSString *status;
@property (nonatomic, retain) NSString *keyword;
@property (nonatomic, retain) ObjB *objb;
@end
Я хочу получить имя OBJECTTYPE в собственности obja (который ObjArea), но это только вернуть NSArray. Я получил название класса другого свойства: objb. Как я могу получить его во время выполнения? У меня есть свойство get list list, и класс их расширяет (категорию) NSObject, как это.
- (NSArray *)propertyList {
Class currentClass = [self class];
NSMutableArray *propertyList = [[NSMutableArray alloc] init];
do {
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(currentClass, &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString *propertyName = [NSString stringWithFormat:@"%s", property_getName(property)];
[propertyList addObject:propertyName];
}
free(properties);
currentClass = [currentClass superclass];
} while ([currentClass superclass]);
return propertyList;
}
и:
- (Class) classOfPropertyNamed:(NSString*)keyPath {
Class class = 0;
unsigned int n = 0;
objc_property_t* properties = class_copyPropertyList(self.class, &n);
for (unsigned int i=0; i<n; i++) {
objc_property_t* property = properties + i;
NSString* name = [NSString stringWithCString:property_getName(*property) encoding:NSUTF8StringEncoding];
if (![keyPath isEqualToString:name]) continue;
const char* attributes = property_getAttributes(*property);
if (attributes[1] == '@') {
NSMutableString* className = [NSMutableString new];
for (int j=3; attributes[j] && attributes[j]!='"'; j++)
[className appendFormat:@"%c", attributes[j]];
class = NSClassFromString(className);
}
break;
}
free(properties);
return class;
}
Вопрос слишком запутан, чтобы ответить. – trojanfoe
@trojanfoe: У меня был вопрос с обновлением. Надеюсь, понимаешь. Спасибо за поддержку. – dleviathan
Nope. Я не знаю, что вы хотите. – trojanfoe