У меня есть массив пользовательских объектов, но я не могу NSLog свойство отдельного объекта в этом массиве, потому что вы можете хранить любые объекты в массиве. Как мне это сделать?Как получить свойство объекта в массиве объектов Objective C?
ответ
Объектив-C предлагает несколько introspection techniques через систему ее запуска.
Вы можете задать объект, если он определен из определенного вида, или ответы на определенное сообщение.
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)];
Вышеприведенный ответ верен для доступа к отдельным полям. Также, как примечание, есть также интересные трюки, которые вы можете использовать с кодированием пути ключа и Операторы коллекции, когда у вас есть коллекция, подобная массиву. Например, если у вас есть большой массив объектов с небольшим числом значений для одного поля:
NSArray *allObjects;
вы можете создать массив со всеми уникальными значениями одного из ваших полей с утверждением:
NSArray *values=[allObjects valueForKeyPath:@"@distinctUnionOfObjects.myObjectsInterestingProperty"];
или вы можете найти среднее значение поля с утверждением:
NSNumber *average=[allObjects valueForKeyPath:@"@avg.myObjectsInterestingProperty"];
Все другой путь ключ-значение Коллекция операторов вы можете использовать этот способ, перечислены в Apple's Key-Value Programming Guide
- 1. Objective C Обновление объектов в массиве
- 2. Редактировать свойство объекта в массиве объектов
- 3. Изменить свойство объекта в массиве объектов
- 4. Objective-C: определение индекса объекта в массиве
- 5. Получить список объектов в Objective-C
- 6. Как получить свойство объекта из ArrayList объектов
- 7. Как найти и изменить свойство объекта в массиве объектов?
- 8. Непоследовательность объектов объектов Objective-C
- 9. доступа свойство в массиве объектов
- 10. свойства объектов на массив (Objective-C)
- 11. Получить Objective-C свойство от чистого C
- 12. Как преобразовать свойство объекта в строку в Objective-c
- 13. установить свойство объекта в массиве
- 14. C массив объектов Objective C
- 15. Приложение Objective-C iOS не хранит данные в массиве объектов
- 16. Как использовать двумерный массив C объектов Objective-C?
- 17. Сравнить свойство объектов, хранящихся в массиве
- 18. Каков наилучший способ изменить свойство объекта в массиве объектов javascript?
- 19. Objective-C Массив объектов
- 20. Сериализация объектов в Objective C
- 21. Как редактировать изменяемое свойство в Objective C?
- 22. пытается установить свойство объектов в массиве
- 23. Получить свойство элемента в массиве
- 24. C# Reflection - получить свойство объекта
- 25. C++ хранение объекта в массиве объектов внутри конструктора этого объекта
- 26. Objective-C Высвобождение объектов в C-массивах
- 27. Как Objective-C инициализирует свойство C struct как свойство?
- 28. Инициализация объектов в Objective-C
- 29. Objective-C свойство
- 30. Объявление объекта в Objective-C
Все объекты в вашем массиве того же типа? Если да, не можете ли вы отбросить объект и получить доступ к тому, что вам нужно? –
Кастинг не требуется в Objective-C, так как Runtime предлагает достойную степень самоанализа. – vikingosegundo