2013-03-16 3 views
0

В моем приложении у меня есть день рождения друзей, и мне нужно уведомить пользователя, когда наступит день рождения кого-то. У Array будет день рождения около 200 друзей. В этом случаеUILocalNotification или Push Notification

UILocalNotification будет работать или нет, поскольку Apple говорит Each application on a device is limited to the soonest-firing 64 scheduled local notifications. Если да, то как мне нужно реализовать UILocalNotication.

Я не хочу идти за PushNotification. Любые предложения будут оценены.

Я планирования Местное уведомление, как это: -

-(void) scheduleNotification{ 
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    [self.notifications removeAllObjects]; 
    for (int i = 0; i< [delegate.viewController.contactList count] ; i++) { 
     UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 
     NSString *name = [[delegate.viewController.contactList objectAtIndex:i]objectForKey:NAME_KEY]; 
     NSString *birthday = [[delegate.viewController.contactList objectAtIndex:i]objectForKey:BIRTHDAY_KEY]; 
     if (birthday) { 
      [formatter setDateFormat:@"MM/dd/yyyy"]; 
      [formatter setLocale:[NSLocale currentLocale]]; 
      [formatter setTimeZone:[NSTimeZone systemTimeZone]]; 
      NSDate *date = [formatter dateFromString:birthday]; 
      if (date == nil) { 
       [formatter setDateFormat:@"MM/dd"]; 
       [formatter setLocale:[NSLocale currentLocale]]; 
       [formatter setTimeZone:[NSTimeZone systemTimeZone]]; 
       date = [formatter dateFromString:birthday]; 
      } 
      NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
      NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date]; 

      componentsEnd.year = [[NSDate date] year]; 
      date = [gregorianEnd dateFromComponents:componentsEnd]; 
      self.alarmTime = [date dateByAddingTimeInterval:self.mTimeInterval]; 
      localNotification.fireDate = _alarmTime; 
      localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
      localNotification.applicationIconBadgeNumber = 1; 

      NSString *itemName = @"B'day Alert!!!"; 
      NSString *msgName = [NSString stringWithFormat:@"Celebrate %@'s B'day",name]; 
      NSDictionary *userDict = [NSDictionary dictionaryWithObjectsAndKeys:itemName,MessageKey, msgName,TitleKey, nil]; 
      localNotification.userInfo = userDict; 
      localNotification.soundName = self.soundName; 
      localNotification.alertBody = [NSString stringWithFormat:@"Celebrate %@'s B'day",name]; 


      [self.notifications addObject:localNotification]; 
      } 
     } 
    } 
} 

Я выполнил мой applicationDidEnterBackground делегат как:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

    UILocalNotification* notification; 

    for (int i = 0; i< [self.settingVC.notifications count]; i++) { 

     notification = [self.settingVC.notifications objectAtIndex:i]; 
     [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
    } 

} 

Кроме того, в didReceiveLocalNotification делегата у меня есть это:

- (void)application:(UIApplication *)application 
didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    NSString *itemName = [notification.userInfo objectForKey:TitleKey]; 
    NSString *messageTitle = [notification.userInfo objectForKey:MessageKey]; 
    [self _showAlert:itemName withTitle:messageTitle]; 
    application.applicationIconBadgeNumber = notification.applicationIconBadgeNumber-1; 
} 

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

ответ

2

Вы все еще можете использовать UILocalNotification и планируете только расписание 64 ближайших дней рождения. Перепланируйте их в любое время, когда в приложении есть активность, так что последние обновляются. Я бы предположил, что 64 уведомления позволят пользователю достаточно времени, прежде чем им нужно будет снова запустить приложение.

+0

: - Я добавил свои коды в свои вопросы. Какие изменения мне необходимо внести в моих кодах. – iCoder4777