2012-03-04 19 views
51

私が作ろうとしているこのアプリケーションでは、プッシュ通知を使用します。この部分はうまく動作します。通知を送信すると、アプリアイコンにバッジも追加されます。問題は、アプリケーションを昼食するときにもう一度消えるべきときですが、そうではありません。 application didFinishLaunchingWithOptionsiOSアプリアイコンからバッジを削除する

-(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]; 
} 

私は、このように0にバッジを設定しよう:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

はどのようにしてアプリケーションのアイコンのバッジをクリアすることができますか?

答えて

8

おそらく、あなたのアプリがまだバックグラウンドで実行されているため、-application:didFinishLaunchingWithOptions:は呼び出されていません。アプリがバックグラウンドから起動されたときにバッジカウントを削除するには、バッジ番号を-applicationWillEnterForeground:にリセットする必要があります。

+0

ありがとうFabian!あなたの答えはちょうど私が必要としたものでした:) thannnksks – thar

+0

Are -applicationDidBecomeActiveと-applicationWillEnterForeground:同じかそれ以上のことをやっていますか? -applicationDidBecomeActiveにリセットを配置するとき。私は両方の状況で動作します。 – thar

+0

-applicaionDidBecomeActive:電話からの返信時にも呼び出されます。 -applicationWillEnterForeground:あなたの状況に適した方法です。 –

192

あなたのアプリが再びアクティブになり、あなたにも-applicationDidBecomeActive:でバッジカウントをリセットする必要があり、バックグラウンドでまだある場合:

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

あなたのアプリはまだ-application:didFinishLaunchingWithOptions:が呼び出されることはありませんバックグラウンドで実行されている場合。

+0

ありがとう!それから何か意味があります:)作品はただ見つけます、私はBecomeActiveメソッドでリセットします。なぜ私はそれを2回持っているべきではないのですか? – thar

+6

'' -applicationDidBecomeActive: ''を一度リセットするだけで問題ありません。このメソッドは、 '' -application:didFinishLaunchingWithOptions: ''が呼び出されたときにも呼び出されるためです。私の答えを受け入れてください:) – Mark

0

このコードも使用できます。

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

または特定のViewController

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

この正確なコードは、質問の一部です。 – Brian

+1

誰かがこの回答を投票したのはなぜですか? –

1

たぶん(AppDelegate.mに)applicationWillResignActiveでそれを呼び出すには:

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

これはpush場合badgeをクリアするためにあなたを助けるアプリ来ます開かれている。ユーザーがnotificationと表示され、Home Button(1回または2回)を押すと、ユーザーはそれを消去します。また、appclosed(ユーザーがそれを開いた後にクリア)であるかどうかは明らかです。

Hereこのメソッドが呼び出されたときにわかります。

関連する問題