Реализация автоматической загрузки данных с сервера express. js в мобильное приложение Objective- C - PullRequest
1 голос
/ 27 января 2020

У меня есть приложение, написанное на Objective- C, которое нуждается в автоматической загрузке некоторых данных с сервера node.js.

Приложение 1 отправляет на мой сервер сообщение, которое Приложение 2 затем должно получить. Приложение 2 должно загрузить это сообщение автоматически (без кнопок ref sh). Эти сообщения являются общими данными, а не удаленными уведомлениями с APN.

В настоящее время я использую следующее:

- (void) checkForNewMessages {

   // call the method on a background thread
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       [self->dataParser getMessages:^(NSArray *arr, NSError *error) {
           // If there's an error
           if (error) {
               return;
           }
           // otherwise
           [self->messageArray removeAllObjects];
           self-> messageArray = [NSMutableArray arrayWithArray:arr];
           if (self-> messageArray) { // is not nil
               // update UI on the main thread
               dispatch_async(dispatch_get_main_queue(), ^{
                   [self->newMessageTimer invalidate];
                   [self tableRefresh];
               });
           }
       }];
   });
}

, который использует запрос GET для извлечения сообщений (управляется повторяющейся 10-секундной таймер, который делает недействительным при обнаружении сообщений).

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

По сути, есть ли лучшее решение для этого типа функциональности или это кажется совершенно уместным для производственного приложения.

1 Ответ

1 голос
/ 28 января 2020

С помощью DISPATCH_QUEUE_PRIORITY_DEFAULT вы разрешаете системе выбирать очередь для использования, и иногда она может решить выбрать основную очередь, поскольку она достаточно свободна. Так что в вашем случае лучше указать явно, что вам нужна фоновая очередь, как показано ниже

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
       [self->dataParser getMessages:^(NSArray *arr, NSError *error) {
       ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...