2012-03-04 1 views
51

В этом приложении, которое я пытаюсь сделать, я использую push-уведомления. Эта часть работает отлично. Когда я отправляю уведомление, я также добавляю значок к значку приложения. Проблема в том, когда я обедаю приложение, оно должно исчезнуть снова, но это не так.Удаление значка с значка приложения iOS

-(IBAction)Push{ 

    NSMutableDictionary *data = [NSMutableDictionary dictionary]; 

    [data setObject:@"Numfeud: Troels made a move!" forKey:@"alert"]; 

    [data setObject:[NSNumber numberWithInt:1] forKey:@"badge"]; 

    [data setObject:@"bar" forKey:@"foo"]; 

    [PFPush sendPushDataToChannelInBackground:@"GameChannel2" withData:data]; 
} 

В application didFinishLaunchingWithOptions я пытаюсь установить значок на 0 таким образом:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

Как я могу удалить значок значок приложения?

ответ

8

Вероятно, -application:didFinishLaunchingWithOptions: не вызывается, потому что ваше приложение все еще работает в фоновом режиме. Чтобы удалить счетчик значков при запуске приложения из фона, вам придется сбросить номер значка в -applicationWillEnterForeground:.

+0

Спасибо, Фабиан! Ваш ответ был именно тем, что мне нужно :) thannnkkss – thar

+0

Are -applicationDidBecomeActive и -applicationWillEnterForeground: делать то же самое меньше или больше? При установке сброса в -applicationDidBecomeActive. Это работает в обеих ситуациях. – thar

+0

-applicaionDidBecomeActive: будет вызываться при возврате с телефонного звонка. -applicationWillEnterForeground: это подходящий метод в вашей ситуации. –

192

Если ваше приложение становится активным снова и все еще находится в фоновом режиме, вы должны сбросить счетчик жетонов в -applicationDidBecomeActive:, а также:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

Если ваше приложение по-прежнему работает в фоновом режиме -application:didFinishLaunchingWithOptions: не будет называться.

+0

Спасибо! Тогда есть что-то там смысл :) Работы просто найти, я только сбросить его в методе BecomeActive. Не могу сказать, почему я должен иметь это дважды? – thar

+6

Сброс один раз в '' -applicationDidBecomeActive: '' будет отлично. Поскольку этот метод также вызывается, когда вызывается '' -application: doneFinishLaunchingWithOptions: ''. Примите мой ответ :) – Mark

0

Вы также можете использовать эти коды.

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    application.applicationIconBadgeNumber = 0; 
} 

или В конкретном ViewController

- (void)awakeFromNib { 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 
+1

Этот точный код является частью вопроса. – Brian

+1

Почему кто-то проголосовал за этот ответ? –

1

Может быть, назвать его в applicationWillResignActiveAppDelegate.m):

-(void)applicationWillResignActive:(UIApplication *)application{ 
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
} 

Это поможет вам очистить badge если push наступит тогда, когда приложение открыта. Пользователь видит notification, и вы очищаете его, когда он нажимает Home Button (один или два раза). Также будет ясно, если app: closed (очистить после того, как пользователь откроет его).

Here вы можете видеть, когда этот метод называется.

Смежные вопросы