2012-04-17 14 views
0

私はマップビューをピンでロードしています。アドレスブックの人の住所に基づいて、ピンが場所にドロップされます。人が1つの住所を持っている場合、マップは正常に読み込まれています。彼が複数のアドレスを持っているなら、1つのアドレス位置だけが地図上に示されます。しかし、コードは、アドレス帳にその人のすべての住所の場所を読み込むために実行されます。ここに私がしたことがあります。アドレス帳の一人の複数のアドレスにマップをロード

for (NSDictionary *addressDict in address) 
    { 
     firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
     lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
     // contactName = [firstName stringByAppendingString:lastName]; 
     NSString *country = [addressDict objectForKey:@"Country"]; 
     NSString *streetName = [addressDict objectForKey:@"Street"]; 
     NSString *cityName = [addressDict objectForKey:@"City"]; 
     NSString *stateName = [addressDict objectForKey:@"State"]; 

     if (streetName == (id)[NSNull null] || streetName.length == 0) streetName = @""; 
     if (stateName == (id)[NSNull null] || stateName.length == 0) stateName = @""; 
     if (cityName == (id)[NSNull null] || cityName.length == 0) cityName = @""; 
     if (country == (id)[NSNull null] || country.length == 0) country = @""; 

     NSString *fullAddress = [streetName stringByAppendingFormat:@"/%@/%@/%@", cityName, stateName, country]; 
     NSLog(@"full address %@", fullAddress); 

     mapCenter = [self getLocationFromAddressString:fullAddress]; 
     if(stateName != NULL || country != NULL || streetName != NULL || cityName != NULL){ 

      if ((mapCenter.latitude == 0) && (mapCenter.longitude == 0)) 
      { 
       // Alert view      
      } 
      else{ 

      addressFieldSearchBar.text = fullAddress; 
      [NSThread detachNewThreadSelector:@selector(displayMYMap) toTarget:self withObject:nil]; 
     } 
     } 
    } 


-(void)displayMYMap 
{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

MKCoordinateRegion region = mapView.region; 
MKCoordinateSpan span; 
span.latitudeDelta=100; 
span.longitudeDelta=100; 


if(addAnnotation == nil){ 
    if([firstName length] < 1 && [lastName length] < 1){ 
     firstName = @"No Name"; 
     lastName = @""; 
    } 
    else if([firstName length] < 1){ 

     firstName = lastName; 
    } 

    addAnnotation = [[[MyAddressAnnotation alloc] initWithCoordinate:mapCenter title:firstName SubTitle:lastName Recordid:passedRecordID]autorelease]; 
    [mapView addAnnotation:addAnnotation]; 
} 
else{ 
    //  Alert view 
} 

編集:NSLogアドレスを入力すると、アドレス帳のすべてのアドレスが取得されます。そして私がデバッグすると、mapviewをロードするコードはすべてのアドレスのケースで実行されます。しかし、地図では、1つのピン(人の最初のアドレス)だけがロードされます。助言がありますか?

+0

これを記録するときに取得したログ(またはその例)を追加できますか? – Manuel

+0

2012-04-17 16:51:40.740 myProj [3926:15803]フルアドレス//ニューヨーク/米国 2012-04-17 16:51:48.981 myProj [3926:15803]フルアドレス// Chicago/United状態 –

+0

開始のために非メインスレッドでMKMapViewと対話してはいけません! –

答えて

1

if(addAnnotation == nil)-(void)displayMYMapにあるため、2番目のアドレスがロードされません。あなたの最初の注釈が完了したので、addAnnotationはもはやゼロではありません。条件を変更してチェックする

関連する問題