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 アドレスを取得すると、アドレス帳のすべてのアドレスが取得されます。そして、デバッグすると、マップビューをロードするコードがすべてのアドレスケースで実行されます。しかし、マップでは、1 つのピン (人物の最初の住所) のみが読み込まれます。助言がありますか?

4

1 に答える 1

1

if(addAnnotation == nil)の条件により、2 番目の住所が読み込まれません-(void)displayMYMap。最初の注釈が完了すると、addAnnotationもう nil ではありません。条件を変更して確認する

于 2012-04-17T13:42:05.140 に答える