2013-04-10 2 views
2

У меня есть 6 UILocalNotifications. Каждое уведомление имеет свой собственный "USERINFO"Как я могу изменить UserInfo в UILocalNotification?

  1. @ "1"
  2. @ "2"
  3. @ "3"
  4. @ "4"
  5. @ "5"
  6. @ "6"

Затем я удаляю номер уведомления 4 и получаю 5 уведомлений:

  1. @ "1"
  2. @ "2"
  3. @ "3"
  4. @ "5"
  5. @ "6"

Как я могу изменить " userInfo " в уведомлениях на получение:

  1. @" 1 "
  2. @ "2"
  3. @ "3"
  4. @ "4"
  5. @ "5"

Сохранить код -

// Specify custom data for the notification 

NSDictionary *infoDict = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%i", i] forKey:@"notif"]; 
localNotif.userInfo = infoDict; 
i = i + 1; 

Del код -

if (flagTable == 1) 
{ 
    int numberPhoto = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]; 
    int numPhFlag = numberPhoto; 
    int i = 0; 
    NSLog(@"Col notif = %d", numberPhoto); 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    while (numberPhoto == numPhFlag) { 
     localNotif = [[[UIApplication sharedApplication] scheduledLocalNotifications] objectAtIndex:i]; 
     localNotif.timeZone = [NSTimeZone localTimeZone]; 
     NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
     [format setDateFormat:@"dd-MM-yyyy HH:mm"]; 
     NSString *itemDateWithFormat = [format stringFromDate:localNotif.fireDate]; 
     NSLog(@"remText2 %@ = fireDate2 %@", itemDateWithFormat, [appDel.fireDateArray objectAtIndex:row]); 
     if ([itemDateWithFormat isEqualToString:[appDel.fireDateArray objectAtIndex:row]]) { 
      NSLog(@"remText3 %@ = fireDate3 %@", itemDateWithFormat, [appDel.fireDateArray objectAtIndex:row]); 
      [[UIApplication sharedApplication] cancelLocalNotification:localNotif]; 
      numPhFlag = numPhFlag - 1; 
     } 
     i = i + 1; 
    } 
    int getNot = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]; 
    NSLog(@"Col notif2 = %d", getNot); 
} 

Я хочу повторить над уведомлениями и заменить данные в своей пользовательской информации.

+0

показать нам свои коды. – Raptor

ответ

5

Получил ответ =)

int notifCount = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]; 
for (int j = 0; j < notifCount; j++) { 
    UILocalNotification *notific = [[[UIApplication sharedApplication] scheduledLocalNotifications] objectAtIndex:j]; 
    NSLog(@"notificBefore = %@ and j = %i", [notific.userInfo objectForKey:@"notif"], j+1); 
    if ([notific.userInfo objectForKey:@"notif"] != [NSString stringWithFormat:@"%i", j+1]) { 
     [[UIApplication sharedApplication] cancelLocalNotification:notific]; 
     NSDictionary *infoDict = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%i", j+1] forKey:@"notif"]; 
     [notific setUserInfo:infoDict]; 
     NSLog(@"notificEnd = %@", [notific.userInfo objectForKey:@"notif"]); 
     [[UIApplication sharedApplication] scheduleLocalNotification:notific]; 
    } 
} 
1

Одна вещь о UILocalNotification - это то, что вы не можете редактировать информацию о любом uilocalnofication. Вы должны отменить его и перенести его. Поэтому при перепланировании вам придется использовать массив запланированных уведомлений, которые присутствуют и перенести (назначить новое уведомление и отменить существующие. Это похоже на то, что вы заменяете уведомления путем отмены и перенастройки)

NSArray *scheduledNotifications = [[UIApplication sharedApplication] scheduledNotifications]; 
i = 0; 
for (UILocalNotification *notif in scheduledNotifications) { 
    UILocalNotification *notifToReschedule; 

    i++; 

    notifToReschedule.userInfo = [NSString stringWithFormat:@"%@",i]; 
    notifToReschedule.timeZone = notif.timeZone 
    // you can use the already scheduled local notification's information to schedule another one. and cancel the one yo are iterating through. 

    [[UIApplication sharedApplication] scheduleLocalNotification:notifToReschedule]; 

    [[UIApplication sharedApplication] cancelLocalNotification:notif]; 
}  
+0

Поскольку iOS 4.2 scheduleLocalNotifications - это свойство чтения-записи, он может получить массив, работать с ним и установить его с помощью schedLocalNotifications. Он автоматически внепланирует старые уведомления и заменяет их новым массивом –

Смежные вопросы