0

2日間ゴーグルした後、私は誰にとっても(私を除いて)明確であるかのように解決策を見つけることができませんでした!

私は必要です:

Alert.applicationIconBadgeNumber = x  

通知が発生するたびにバックグラウンドで更新されるように、次の方法で通知を繰り返しています。

notif.repeatInterval = NSMinuteCalendarUnit  

繰り返しは1mごとに正常に機能しています。アプリがバックグラウンドで実行されても、BadgeNumberが更新されると、最初に更新された日付の値のみが取得されます。

viewDidLoadでscheduleNotificationメソッドを呼び出しています

これが私の完全なコードです:

- (void)scheduleNotification {
UILocalNotification *notif;
notif = [[[UILocalNotification alloc] init] autorelease];
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.fireDate = [[NSDate date] dateByAddingTimeInterval:5];
notif.repeatInterval = NSMinuteCalendarUnit; 

NSInteger BadgeNumber = [self BadgeNumber];
NSInteger *BadgeNumberPointer = &BadgeNumber;
NSString *BadgeNumberString = [NSString stringWithFormat:@"%i", BadgeNumber];

notif.applicationIconBadgeNumber = *BadgeNumberPointer;

notif.alertBody = BadgeNumberString;
notif.alertAction = @"Hello";

[[UIApplication sharedApplication] scheduleLocalNotification:notif];
}

-(int)BadgeNumber{
NSDate *currentDateUpdate = [[NSDate alloc] init];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"dd"];
NSString *dateCheckUpdate = [formatter2 stringFromDate:currentDateUpdate];
NSInteger dateCheckUpdateInt = [[dateCheckUpdate substringWithRange:NSMakeRange(0, 2)] integerValue];

int BadgeNumber = dateCheckUpdateInt;
return BadgeNumber;
}

修正方法を教えてください、皆さんに感謝します。

4

2 に答える 2

1

オペレーティングシステムはスケジュールされたときに通知をコピーするため、通知のデータは更新されません。したがって、アプリケーションのバッジ番号は変更されません。

通知を繰り返さずに、時間間隔ごとに独自の新しい通知を生成すると、必要な動作が得られる可能性があります。このような通知を生成することを考える唯一の方法は、scheduleNotificationメソッドに一連の通知を投稿し、ユーザーが適切な方法で応答したときに通知を削除することを忘れないでください。OSは次の時系列でスケジュールされた64の通知しか記憶しないため、スケジュールできるのは約1時間分だけです。バッジ番号は現在の日付のようですので、時間を確認して、真夜中から1時間以内にいる場合にのみ、非常に多くの通知を設定する必要があります。

ユーザーを頻繁に口説いたり、バッジ番号で日付を伝えたりすることで、あなたが何を達成しようとしているのかわかりません。私を悩ませたり、バッジ番号を誤用したりしたアプリは、iOSデバイスからすぐに削除されてしまいます。たぶん、あなたが達成しようとしていることを再考することは、あなたをより良い解決策に導くかもしれません。

于 2011-01-19T15:18:26.887 に答える
1

これはすでに回答済みですが、バッジ数をキャッシュする手段としてNSUserDefaultsを使用できます。次に、applicationIconBadgeNumber次のようなものを使用できます。

notif.applicationIconBadgeNumber = ([NSUserDefaults standardUserDefaults] integerForKey:@"badgeCount"] + 1);

その後、ユーザーがそれに応じて応答したときにリセットすることができます。

于 2011-05-13T14:15:17.113 に答える