2013-09-09 3 views
0

В моем приложении Im показывает несколько аннотаций на карте. У меня много разных аннотаций, но в основном у меня есть 12 разных аннотаций с каждым их собственным изображением (так 12 различных изображений аннотаций).Лучший/наиболее эффективный способ фильтрации объектов

Теперь в моем текущем коде я подклассифицировал MKAnnotation и дал ему свойство, которое я назвал «идентификатором», и когда я создаю аннотацию, этот идентификатор будет установлен в соответствующее значение, поэтому позже я мог бы позже фильтровать определенную группу аннотаций и дайте им правильные изображения в viewForNnotation.

- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation { 
CustomAnnotation *pin = annotation; 
MKAnnotationView *pinView=nil; 

if ([annotation isKindOfClass:[MKUserLocation class]]) { 

    return nil; 
} 
else if ([pin.identifier isEqualToString:@"tree"]) { //give annotation a tree image 
    pinView = (MKPinAnnotationView *)[aMapView dequeueReusableAnnotationViewWithIdentifier:@"OwnerAnnotationString"]; 
    pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"OwnerAnnotationString"]; 
    pinView.image = [UIImage imageNamedForDevice:@"tree"]; 
    pinView.centerOffset = CGPointMake(0, -53/2); 
    return pinView; 
} 
else if ([pin.identifier isEqualToString:@"house"]){ //give annotation a house image 
    pinView = (MKPinAnnotationView *)[aMapView dequeueReusableAnnotationViewWithIdentifier:@"SmallGoldPinStringAnkeren"]; 
    pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"anotheridentifier"]; 
    pinView.image = [UIImage imageNamedForDevice:@"house"]; 
    pinView.centerOffset = CGPointMake(8, -43/2); 

    return pinView; 
} 
//and so on 

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

И последний пример этого делается с аннотациями, но я бежал в этот сценарий несколько раз теперь так на самом деле мой вопрос:

Что такое лучший способ проверить, какой тип объекта вы взаимодействуете с таким вы можете установить соответствующие значения для этого конкретного объекта в Objective-C.

+0

1: Какой процесс фильтрации происходит очень медленно? 2: Вы действительно не можете избежать того факта, что вам нужно в какой-то момент проверить какое-то значение, чтобы определить, какое изображение будет доступно. – Joride

+0

Возможно, это не медленно, но я просто думал, что все эти if и else if не являются приятными способ программирования. Это просто выглядит плохо и было интересно, есть ли способ сократить мой код пополам. –

+1

Вы можете, конечно, определить его в каком-то третичном объекте. В итоге вы получите более красивый код lookig в viewController и улучшите разделение проблем. Но тогда возникает вопрос, действительно ли накладные расходы для этого действительно стоят усилий, если у вас действительно есть только пара (скажем, <10) изображений. – Joride

ответ

0

Вместо того, чтобы давать каждому аннотации идентификатор, поместите их в NSmutableArray и поместите этот массив в словарь NS (Mutable). У вас есть ключ в этом словаре, который у вас есть в качестве вашего идентификатора. Таким образом, аннотации уже сортируются при создании, и если вам нужны все они в одном массиве, вы можете просто создать новый изменяемый массив и добавить в него все объекты из массивов в словаре.