2016-04-19 2 views
0

У меня есть пользовательский класс, как показано ниже:Может быть, имя объекта 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; 
} 
+0

Вопрос слишком запутан, чтобы ответить. – trojanfoe

+0

@trojanfoe: У меня был вопрос с обновлением. Надеюсь, понимаешь. Спасибо за поддержку. – dleviathan

+0

Nope. Я не знаю, что вы хотите. – trojanfoe

ответ

0

Вы должны просто установить вам пользовательский объект в массиве затем вызвать

myCustomObject = [yourArray objectAtIndex:someIndex]; 
myCUstomObject.name // Then do what ever you want with it 

или вы можете создать пользовательский объект типа NSArray как это: enter image description here затем выполните следующие действия: enter image description here Затем сделайте то, что хотите с помощью y наш настраиваемый массив

Смежные вопросы