電話しないように注意したい
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:bg_NUM]
から
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
方法!
バッジ番号を含むスケジュールされたローカル通知の場合、バッジは-didReceiveLocalNotification に入力してから数ミリ秒後に非同期に設定されます
サンプル用:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
// ^^^ maybe not reset badge to 0!! ^^^
}
別のコード:
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
sleep(1); //waiting for system is set our scheduled badge
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
// ^^^ most chances for reset badge to 0 ^^^
}
コードをテストし、スクリーン タッチでローカル通知をスケジュールし、システムが実際にバッジを設定するまでの遅延を計算します。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
UILocalNotification *localNotif = [[[UILocalNotification alloc] init] autorelease];
localNotif.applicationIconBadgeNumber = rand()%100+1;
localNotif.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}
[...]
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
while ([UIApplication sharedApplication].applicationIconBadgeNumber == 0) sleep(0);
NSLog(@"badge set: %d after %f sec.", [UIApplication sharedApplication].applicationIconBadgeNumber, CFAbsoluteTimeGetCurrent()-startTime);
}
出力:
badge set: 41 after 0.000839 sec.
badge set: 9 after 0.000754 sec.
badge set: 56 after 0.076026 sec.
badge set: 17 after 0.069889 sec.
badge set: 8 after 0.056245 sec.
badge set: 71 after 0.120729 sec.
badge set: 28 after 0.122720 sec.
badge set: 17 after 0.000758 sec.
このテストは、さまざまなデバイスの iOS 4.2/4.3/5.0/6.1 で行われました
-didReceiveLocalNotification メッセージでバッジ番号をリセットするときは注意してください。
(これは LocalNotification の場合にのみ当てはまり、/リモート プッシュではなく/、受信時にアプリケーションがアクティブな場合にのみ当てはまります)