На мобильном устройстве отображается только ограниченное количество пинов по сравнению с ПК.

Я загружаю вид карты. И я добавляю булавки на карту, основываясь на адресе контактов в адресной книге. У меня бывают странные случаи, когда некоторые булавки (возможно, 2 из 10) не отображаются на карте. Я проверил адрес, он действителен. Но шпилька не падает. Что может быть причиной этого.

    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);

    }

Изменить: я редактирую свой вопрос и буду более конкретным. Я использую код для добавления булавок на свой mapView. На моем Mac PC, если на карте есть 20 булавок. Все 20 штифтов падают точно и работают нормально. Но когда я использую IPhone или iPad, количество выводов значительно уменьшается. То есть из каких-то 20 пинов, которые я сбрасываю, на карте отображаются только 4 кегля. Я не могу понять причину этого.


person Xavi Valero    schedule 27.03.2012    source источник
comment
Не могли бы вы показать часть кода?   -  person HarshIT    schedule 27.03.2012
comment
Я почти уверен, что без вашего кода невозможно сказать, что не так. Другими словами: предоставьте дополнительную информацию, например код.   -  person Manuel    schedule 27.03.2012
comment
Полностью согласен с Хэдли ... пожалуйста, предоставьте то, что вы закодировали ..   -  person Krunal    schedule 27.03.2012


Ответы (2)


Этот код:

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];
    }
}

без разницы.


Метод dequeueReusableAnnotationViewWithIdentifier предназначен для удаления из очереди MKAnnotationView объектов, а не id<MKAnnotation> объектов.

В любом случае код исключения из очереди принадлежит методу делегата viewForAnnotation, а не здесь.

Здесь вы должны просто создать свои объекты аннотаций (MyAddressAnnotation) и вызвать для них addAnnotation.

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

person Community    schedule 27.03.2012
comment
Можно ли как-то ускорить загрузку карты? Сейчас он слишком медленно загружается. - person Xavi Valero; 27.03.2012

Виноват. В строке «fulladdress» (между streetName и cityName), которую я использую, не были разделены пробелом, «,» или «/». Поэтому некоторые адреса не распознавались.

person Xavi Valero    schedule 17.04.2012