Не совсем уверен, что вы спрашиваете, но звучит так, как будто у вас есть коллекция объектов, которые являются подклассами Place, и вам нужно определить конкретный тип во время выполнения.
Вот как вы делаете разветвление и приведение:
for (id object in item.places) {
if ([object isKindOfClass:[SomeConcretePlace class]]) {
((SomeConcretePlace *)object).someProperty = something;
} else if ([object isKindOfClass:[AnotherConcretePlace class]]) {
somethingElse = ((AnotherConcretePlace *)object).someProperty;
}
}
Обязательно посмотрите документы для isKindOfClass: и isMemberOfClass: в ссылке на NSObject, чтобы понять разницу, вы можете использовать любой из них в зависимости от обстоятельств.
(Вы можете заменить «id object» на «Place * object», я просто использовал id в своем коде. - edit: или, может быть, вы не можете, если он абстрактный, см. Комментарий mzarra. «Id» работает отлично .)