мультипронизывая в iOS, MapKit, показывающий данные

Мое приложение - базирующийся MapKit, где за многочисленными пользователями могут следить. Теперь используя наши веб-сервисы, я показываю свое местоположение на карте плюс другие последние пользователи, скажем, 10 мест. Если пользователь обновляет их местоположение, его посылают через веб-сервис и показывают на картах через, перезванивают. Я в состоянии следить за другими пользователями в режиме реального времени, но не знаю, как использовать Пронизывание здесь. Мой UI блокирует время от времени и также терпит крах иногда из-за проблемы памяти.

В моем connectionDidFinishLoading метод, я разбираю данные JSON и затем создаю аннотации и наложение:

-(void) connectionDidFinishLoading: (NSURLConnection *) connection
{

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

NSArray *trackingDict = [NSJSONSerialization JSONObjectWithData:empJsonData options:kNilOptions error:nil];
NSLog(@"Json Dictionary = %@", trackingDict);
NSLog(@"COUNT = %i",trackingDict.count);

if ([trackingDict count] >= 2) {
    for (trackUsersCount = 0; trackUsersCount< trackingDict.count; trackUsersCount++) {
        NSLog(@"trackUsersCount %i", trackUsersCount);

        NSMutableArray *latlongArray = [[NSMutableArray alloc]init];
        latlongArray = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"latlong"];

        [userLongitudeArray removeAllObjects];
        [userLatitudeArray removeAllObjects];

        for (int i = 0; i %@", [[latlongArray objectAtIndex:i]objectForKey:@"lat"]);
            NSLog(@"COunt - > %@", [[latlongArray objectAtIndex:i]objectForKey:@"long"]);
            [userLatitudeArray addObject:[[latlongArray objectAtIndex:i]objectForKey:@"lat"]];
            [userLongitudeArray addObject:[[latlongArray objectAtIndex:i]objectForKey:@"long"]];

        }

       //ProfilePIC URL
        profilePicURLString = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"user_profilePicture"];

NSString *name = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"user_firstName"];
        [userNameArray addObject:name];
        [profilePicURLStringArray addObject:profilePicURLString];

        for (int i = 0; i

}

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

Любая помощь очень ценится!

1
nl ja de
It' s хорошо, чтобы использовать фоновый поток, чтобы изменить данные (модель), но вы действительно shouldn' t изменяют UI от фонового потока.
добавлено автор Rok Jarc, источник
Спасибо @rokjarc для ответа. Я действительно должен знать, как я буду иметь дело с пронизыванием в моей ситуации. Любой типовой отрывок был бы очень полезен.
добавлено автор Samapple007, источник

1 ответы

I don't think there's an quick & easy fix for this. One approach would be to separate the code that collects (modifies) the data from the code that updates the view.

Установите код, который имеет дело с UI в отдельный метод, updateUI , например.

Отсюда на вас имеют несколько выбора. Вы могли попробовать это, например:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
   //perform the data collection, calculations... 
   //here is where the model in MVC gets modified
   //
   [self performSelectorOnMainThread: @selector(updateUI) withObject:nil waitUntilDone: NO];
}

-(void)updateUI
{
   //do the UI updates (like adding overlays etc...) here 
}

Вы могли также хранить все данные, должен был обновить UI к своего рода объекту и передать его как withObject: параметр.

0
добавлено
Просто найденный большим ответом, который мог выручить вас полностью: stackoverflow.com/a/1730053/653513 Это имеет дело с загрузкой изображения, но в основном it' s то же самое.
добавлено автор Rok Jarc, источник
Хорошо спасибо, я попробую, всего один вопрос, связанный с вашим последним ответом, это, если я буду иметь дело с UI в отдельном методе (как you' письменный ve), будет connectionDidFinishLoading , метод не блокирует мой UI? Поскольку данные все еще прибывают в этот метод.
добавлено автор Samapple007, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.