Как получить свойство объекта в массиве этих объектов в Objective C? - PullRequest
3 голосов
/ 15 января 2012

У меня есть массив пользовательских объектов, но я не могу NSLog свойство отдельного объекта в этом массиве, потому что вы можете хранить любые объекты в массиве. Как бы я поступил так?

Ответы [ 2 ]

6 голосов
/ 15 января 2012

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

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

for (id anObject in array ){
    if([anObject isKindOfClass:[MyClass class]]){
        MyOtherClass *obj = anObject.myProperty ;
        NSLog(@"%@", obj);
    }
}

и

for (id anObject in array ){
    if( [anObject respondsToSelector:@selector(aMethod)] ) {
        NSLog(@"%@",[anObject aMethod]);
    }
}

Поскольку свойства обычно приводят к синтезированным методам, второй способ также должен работать для них.

Также стоит упомянуть - хотя и не в рамках этого вопроса:

Классы также можно задавать, если они выполняют определенный протокол. И, как Объекты могут определить класс, это также возможно:

[[anObject class] conformsToProtocol:@protocol(MyProtocol)];
2 голосов
/ 15 января 2012

Приведенный выше ответ верен для доступа к отдельным полям.Как примечание, есть также некоторые интересные приемы, которые вы можете сделать с кодированием пути ключ-значение и Операторы сбора , когда у вас есть коллекция, подобная массиву.Например, если у вас есть большой массив объектов с небольшим количеством значений для одного поля:

 NSArray *allObjects;

, вы можете создать массив со всеми уникальными значениями одного из ваших полей с помощью инструкции:

 NSArray *values=[allObjects valueForKeyPath:@"@distinctUnionOfObjects.myObjectsInterestingProperty"];

или вы можете найти среднее значение поля с помощью инструкции:

 NSNumber *average=[allObjects valueForKeyPath:@"@avg.myObjectsInterestingProperty"];

Все остальные операторы сбора значений ключа, которые вы можете использовать таким образом, перечислены в Руководство по программированию ключевого значения Apple

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