Ich lade eine Kartenansicht. Und ich füge der Karte Pins hinzu, die auf den Adressen der Kontakte im Adressbuch basieren. Ich habe einige seltsame Fälle, in denen einige Pins (vielleicht 2 von 10) nicht in der Kartenansicht angezeigt werden. Ich habe die Adresse überprüft, die gültig ist. Aber die Stecknadel fällt nicht ab. Was könnte der Grund dafür sein?
for (i = 0; i<[groupContentArray count]; i++) {
person = ABAddressBookGetPersonWithRecordID(addressbook,[[groupContentArray objectAtIndex:i] intValue]);
ABMultiValueRef addressProperty = ABRecordCopyValue(person, kABPersonAddressProperty);
NSArray *address = (NSArray *)ABMultiValueCopyArrayOfAllValues(addressProperty);
NSLog(@"Address %@", address);
for (NSDictionary *addressDict in address)
{
addAnnotation = nil;
firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
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];
mapCenter = [self getLocationFromAddressString:fullAddress];
if(stateName != NULL || country != NULL || streetName != NULL || cityName != NULL){
if ((mapCenter.latitude == 0) && (mapCenter.longitude == 0))
{
// Alert View
}
else{
addAnnotation = (MyAddressAnnotation *)[mapView dequeueReusableAnnotationViewWithIdentifier:[groupContentArray objectAtIndex:i]];
if(addAnnotation == nil){
addAnnotation = [[[MyAddressAnnotation alloc] initWithCoordinate:mapCenter title:firstName SubTitle:lastName Recordid:[groupContentArray objectAtIndex:i] ]autorelease];
[mapView addAnnotation:addAnnotation];}
}
}
}
CFRelease(addressProperty);
}
Bearbeiten: Ich ändere meine Frage und präzisiere sie. Ich verwende den Code, um Pins auf meiner mapView abzulegen. Auf meinem Mac PC, wenn es 20 Pins in der Karte fallen gelassen werden. Alle 20 Pins werden korrekt abgelegt und funktionieren einwandfrei. Aber wenn ich IPhone oder IPad verwende, reduziert sich die Anzahl der Pins massiv. Das heißt, von den 20 Pins, die ich fallen lasse, werden nur 4 Pins auf der Karte angezeigt. Ich bin nicht in der Lage, einen Grund dafür herauszufinden.