-performSelector: afterDelay: и модальные контроллеры представления - PullRequest
0 голосов
/ 15 октября 2010

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

Периодически мы проверяем, нужно ли синхронизировать какие-либо данные обратно на сервер.Мы делаем это с помощью набора функций в нашем AppDelegate, который периодически опрашивает любые изменения.У нас есть один метод, который запускает опрос:

- (void) startBackgroundSync {
    if (self.queue == nil) {
        self.queue = [[NSOperationQueue alloc] init];
    }
    [self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}

А затем -doBackgroundSync фактически проверяет изменения и добавляет операцию синхронизации к NSOperationQueue.Затем он сбрасывает себя так:

-(void) doBackgroundSync {
    NSLog(@"Check for changes");
    // check for changes and add operation to queue
    [self performSelector:@selector(doBackgroundSync) withObject:nil afterDelay:5.f];
}

Первоначально мы вызывали -startBackgroundSync из модального контроллера вида входа в систему (до того, как он был отклонен).Затем мы изменим некоторые другие настройки и отклоним модальный контроллер вида.Контроллер представления входа в систему не освобождается при отклонении, но сохраняется AppDelegate (бывают более поздние времена, когда нам приходится «блокировать» приложение).После того, как модальный контроллер вида был уволен, -doBackgroundSync никогда не вызывали.Если мы поместим вызов для -startBackgroundSync в контроллер основного вида, который отображается после закрытия контроллера модального вида, то -doBackgroundSync будет непрерывно вызываться, как и ожидалось.

Что может вызвать такое поведение?Есть ли в -dismissModalViewController что-то, что могло бы сделать недействительным что-либо в цикле выполнения, созданном этим контроллером представления?

1 Ответ

0 голосов
/ 15 октября 2010

перейдите сюда для получения более подробной информации. Просмотр руководства по программированию контроллера для iOS , но «отклонение» модального контроллера возвращает приложения в его предыдущее состояние.Предлагаемый способ поддержания цикла выполнения состоит в том, чтобы попросить делегата для него из модального контроллера.

...