Вопрос по ios – Приложение iOS для приложения WillEnterForeground на некоторое время зависло

9

Я добавляю эту функцию для публикации уведомления, когда приложение выходит на передний план:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName: @"UIApplicationWillEnterForegroundNotification" object: nil];
}

В моем собственном классе:

- (void) handleEnterForeground: (NSNotification*) sender
{
    [self reloadTableData];
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(handleEnterForeground:)
                                             name: @"UIApplicationWillEnterForegroundNotification"
                                           object: nil];
}

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

Ваш Ответ

1   ответ
17

по которой он срабатывает дважды, в том, что вы снова запускаете его вручную.

Постскриптум Лучше использовать имя переменной UIApplicationWillEnterForeground вместо литерала NSString.

РЕДАКТИРОВАТЬ: Я понимаю, что теперь путаница происходит из-за того, что вы не знали, что это даже имя уже было занято. В качестве примечания для других людей, сталкивающихся с подобными проблемами, хорошей практикой является добавление префиксов к именам событий с префиксом проекта (т. Е. XYZEventNotification), чтобы избежать коллизий.

Вместо того, чтобы заменить его на другое слово ... почему бы просто не извлечь этот код и использовать событие, которое происходит автоматически?
@cnuhe запускает его один раз, а среда выполнения iOS запускает его один раз. Это событие вызывается автоматически.
где он стреляет дважды?
Спасибо, теперь все нормально !!! Я изменяю & quot; UIApplicationWillEnterForegroundNotification & quot; к другому слову. jxdwinter
Я уверен, что однажды вызвал эту функцию. jxdwinter

Похожие вопросы