Проблема с динамическим изменением значка приложения при закрытии приложения (iOS) - PullRequest
1 голос
/ 07 апреля 2020

Когда мое приложение завершает работу, я хочу, чтобы оно изменило значок приложения на значок по умолчанию. Для этого я реализовал этот код:

- (void)applicationWillTerminate:(UIApplication *)application
{
    if ([application supportsAlternateIcons] == NO)
            return;

    [application setAlternateIconName:@"alternate"
                                          completionHandler:^(NSError * _Nullable error) {
                                              NSLog(@"%@", [error description]);
                                          }];
}

Это не похоже на работу, и я не понимаю, почему. Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 07 апреля 2020

Как только вы вернетесь с applicationWillTerminate, система завершит ваш процесс, поэтому setAlternateIconName может не успеть завершить sh.

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

Что-то вроде:

- (void)applicationWillTerminate:(UIApplication *)application
{
    if ([application supportsAlternateIcons] == NO)
            return;

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);


    [application setAlternateIconName:@"alternate"
                                          completionHandler:^(NSError * _Nullable error) {
                                              NSLog(@"%@", [error description]);
                                              dispatch_semaphore_signal(semaphore);
                                          }];

     // Wait 3 seconds -- we have ~5 seconds to return
     dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, 3.0 * NSEC_PER_SEC);

     dispatch_semaphore_wait(semaphore, waitTime);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...