executeSelectorInBackground и MapKit - PullRequest
       6

executeSelectorInBackground и MapKit

0 голосов
/ 18 января 2012

Я работаю с MapKit и аннотациями в iOS. Прямо перед добавлением аннотаций (что может занять некоторое время) я хотел бы отобразить небольшой UIView «Загрузка ...». Если я делаю это без многопоточности, представление загрузки отстает настолько сильно, что едва отображается до его закрытия. Если я использую executeSelectorInBackground для загрузки аннотаций, он будет работать каждые несколько попыток, а остальная часть UIView будет отображаться, но аннотаций не будет, даже если вызывается mapView:didAddAnnotationViews:. Кто-нибудь может подумать, почему это ведет себя так непредсказуемо?

Вот как я это называю, если это поможет:

[self performSelectorInBackground:@selector(refreshAnnos) withObject:nil];

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Вы можете загружать аннотации в фоновом режиме, но вы всегда должны добавлять их в основной поток.

Вот почему

     mapView:didAddAnnotationViews: 

вызывается, но не распространяется на пользовательский интерфейс. Это было бы то же самое, что вызов метода UITableViewDelegate в фоновом режиме.

Вы можете попробовать следующий шаблон проектирования с использованием GCD

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
       //Load the annotations on the background queue;
        dispatch_async(dispatch_get_main_queue(), ^{
           //add the annotations to the mapView; 
        });
    });
1 голос
/ 18 января 2012

Что вы делаете в refreshAnnos?

Если вы добавляете аннотации к просмотру карты там, это не будет работать (из-за фонового потока). Вам необходимо обновить вид карты внутри основного потока.

Лучший, Christian

...