UILocalNotification未被取消

时间:2013-04-18 07:10:09

标签: iphone ios objective-c uilocalnotification

我正在尝试取消已安排的通知,通知正在调用,但是当我尝试取消通知时,它不会被取消。

当只有一个预定通知时,NSArray通知包含一些随机值。谁能帮我 。我想取消特定bookID的通知。

更新

 -(UILocalNotification *)scheduleNotification :(int)remedyID
        {
           NSString *descriptionBody;

           NSInteger frequency;

          UILocalNotification *notif = [[UILocalNotification alloc] init];

            NSLog(@"%d",remedyID);

            descriptionBody =[[self remedyDetailsForRemedyID:remedyID] objectForKey:@"RemedyTxtDic"];
            frequency = [[[self remedyDetailsForRemedyID:remedyID] objectForKey:@"RemedyFrequency"]intValue];

            NSArray *notificationFireDates = [self fireDatesForFrequency:frequency];

            for (NSDate *fireDate in notificationFireDates)
            {
                    notif.timeZone = [NSTimeZone defaultTimeZone];


                    notif.repeatInterval = NSDayCalendarUnit;
                    notif.alertBody = [NSString stringWithString:descriptionBody];
                    notif.alertAction = @"Show me";
                    notif.soundName = UILocalNotificationDefaultSoundName;

                    notif.applicationIconBadgeNumber = 1;

                    notif.fireDate = fireDate;

                    NSDictionary *userDict = [NSDictionary dictionaryWithObjectsAndKeys:notif.alertBody,                                         @"kRemindMeNotificationDataKey",  [NSNumber numberWithInt:remedyID],kRemindMeNotificationRemedyIDKey,
                                              nil];

                    notif.userInfo = userDict;

                    [[UIApplication sharedApplication] scheduleLocalNotification:notif];
                }

                return notif;

    }



- (void)cancelNotification:(int)bookID
{
    int notificationBook=0;

        NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

    for (UILocalNotification *notification in notifications)
    {
        int notifBookId = [[notification.userInfo objectForKey:kRemindMeNotificationBookIDKey] intValue];


        for (int i=0; i<[bookArray count]; i++)
        {
            notificationBook =[[[remedyArray objectAtIndex:i] objectForKey:@"BookID"] intValue];
        }

        NSLog(@"%d",[[notification.userInfo objectForKey:kRemindMeNotificationBookIDKey]intValue]);

        NSLog(@"%d",notifBookId);

        if (bookId == notifBookId)
        {
            [[UIApplication sharedApplication] cancelLocalNotification:notification];
        }
    }

}

2 个答案:

答案 0 :(得分:2)

  

当只有一个预定通知时,NSArray通知包含一些随机值。

可能是由于该应用程序的某些先前安排的通知已经存在。一旦尝试取消应用程序的所有通知再次启动

   [[UIApplication sharedApplication] cancelAllLocalNotifications];  

您的主要问题

- (void)cancelNotification:(int)remedyId
{
NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSLog(@"Cancelling... Before %d",[[[UIApplication sharedApplication]scheduledLocalNotifications]count]);

  for (UILocalNotification *notification in notifications)
  {

  int notifRemedyId = [[notification.userInfo objectForKey:@"kRemindMeNotificationRemedyIDKey"]intValue];  // I change the key value

    NSLog(@"remedyID  : %d",remedyId);
    NSLog(@"notifyId : %d",notifRemedyId);
    if (remedyId == notifRemedyId) {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
      }
   }

NSLog(@"Cancelling... After %d",[[[UIApplication sharedApplication]scheduledLocalNotifications]count]);


 }

你给的钥匙是错的。我认为这是你的问题。我想出了另外一件事你正在安排每次通知两次,我不知道为什么。检查一下。

答案 1 :(得分:0)

您应该将检查移到循环内部

for (int i=0; i<[bookArray count]; i++)
{
    int bookId =[[[remedyArray objectAtIndex:i] objectForKey:@"BookID"]    intValue];

    if (bookId == notifBookId)
    {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
    }
}