6

LocalNotifications の管理の 1 つの側面に問題があります - iOS 6 で単一の通知を削除します。

ここに画像の説明を入力

テキストコンテンツと発火日を含む LocalNotification を作成でき、機能します。

iOS 5 では、通知はホーム画面に 2 つのボタンがある AlertView として発生し、いずれかをタッチすると消えます。を使用して通知の火災をキャンセルでき[[UIApplication sharedApplication] cancelLocalNotification:theNotification]ます。ここでは問題ありません。

iOS 6 では、起動時に上記のように通知センターで通知が発生します。を使用してキャンセルすると、起動し[[UIApplication sharedApplication] cancelLocalNotification:theNotification]ません-動作します。でも着火後は…

私の問題:

この 1 回発生した通知を通知センターから消去できません。たとえば、通知がタッチされた後、またはアプリケーション内の何らかのアクションが実行された後に、通知が消えるようにします。

私が試したこと:

  • using [[UIApplication sharedApplication] cancelLocalNotification:theNotification]- 通知の起動をキャンセルします (実際には、通知既に起動されているので必要ありません) が、起動された通知を通知センターから消去しません。
  • 配列からアイテムを削除する[[UIApplication sharedApplication] scheduledLocalNotifications]- この関数は常に空の配列を返すため、機能しません。通知がいくつ設定されていても (動作中です!) (誰かが理由を知っていますか?)

私が今していること

を使用してすべての通知を削除して[[UIApplication sharedApplication] cancelAllLocalNotifications]います-それはそれらをキャンセルし、通知センターから消去してから、消去したいものなしでそれらを元に戻します。

ご覧のとおり、これはかなりばかげた冗長なソリューションですが、これまでのところ、これ以上の解決策は見つかりませんでした。

助言がありますか?

4

1 に答える 1

1

これを試してみてください.....これが役立つかもしれません...すべての通知をクリアしたい場所からこのコードを書いてください。

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    [[UIApplication sharedApplication] cancelAllLocalNotifications];

1 つの通知を消去するには

スケジュールされた通知の配列は、次から取得できます。@property(nonatomic,copy) NSArray *scheduledLocalNotifications

選択したインデックス番号で必要なものを取得し、UILocalNotification* をに渡します - (void)cancelLocalNotification:(UILocalNotification *)notification.

キーの一意の値をローカル通知のユーザー情報に保存できます。すべてのローカル通知を取得し、配列をループして特定の通知を削除します。

コードは次のとおりです。

UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
    NSDictionary *userInfoCurrent = oneEvent.userInfo;
    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];
    if ([uid isEqualToString:uidtodelete])
    {
        //Cancelling local notification
        [app cancelLocalNotification:oneEvent];
        break;
    }
}
于 2012-10-25T12:29:02.990 に答える