2013-03-07 2 views
2

Я прочитал много сообщений об уведомлении, но почему-то я ошибаюсь, поэтому я задаю этот вопрос. Я хочу получать ежедневное уведомление в 9.00 в моем приложении. Я получаю это должным образом в 9.00 утра без проблем, что так всегда, но трудности в том, что я также получаю такое же уведомление в 2.00 утра. Я пытаюсь использовать следующий код. Может ли кто-нибудь сказать мне, где я ошибаюсь. Или это проблема ios6. Любая помощь будет оценена по достоинству. Спасибо.Уведомление в приложении iphone

NSString *day [email protected]"9:00 AM"; 
    NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init]autorelease]; 
    [dateFormat setDateFormat:@"hh:mm a"]; 
    //NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
    //[dateFormat setTimeZone:gmt]; 
    NSDate *today=[dateFormat dateFromString:day]; 
    NSLog(@"string %@ & date %@",day,today); 
    Class cls = NSClassFromString(@"UILocalNotification"); 
    if (cls != nil) 
    { 
     // delObj.QCouter=delObj.QCouter+1; 

     //[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
     notif = [[cls alloc] init]; 
     notif.fireDate =today; 
     notif.timeZone = [NSTimeZone systemTimeZone]; 
     NSLog(@"timeZone %@ ",[NSTimeZone systemTimeZone]); 
     notif.alertBody = @"You have a new letter "; 
     notif.alertAction = NSLocalizedString(@"View", nil);; 
     notif.soundName = @"Ding3.wav"; 
     notif.applicationIconBadgeNumber = 1; 
     notif.repeatInterval = NSDayCalendarUnit; 
     [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"Status"]; 
     NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"You have a notifiaction" 
                     forKey:kRemindMeNotificationDataKey]; 
     notif.userInfo = userDict; 
     // NSLog(@"userInfo %@",notif.userInfo); 
     [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
     [notif release]; 
     [[NSUserDefaults standardUserDefaults] setObject:@"CurrentDay" forKey:@"DayChange"]; 
     } 

ответ

1

Привет попробовать следующий код: -

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    NSDate *date = [NSDate date]; 
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date]; 
    [components setHour: 9]; 
    [components setMinute: 0]; 
    [components setSecond: 0]; 

    NSDate *today = [gregorian dateFromComponents: components]; 
    [gregorian release]; 

    Class cls = NSClassFromString(@"UILocalNotification"); 
    if (cls != nil) 
    { 
     notif = [[cls alloc] init]; 
     notif.fireDate =today; 
     notif.alertBody = @"You have a new letter "; 
     notif.alertAction = NSLocalizedString(@"View", nil);; 
     notif.soundName = @"Ding3.wav"; 
     notif.applicationIconBadgeNumber = 1; 
     notif.repeatInterval = NSDayCalendarUnit; 
     [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"Status"]; 
     NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"You have a notifiaction" 
                     forKey:kRemindMeNotificationDataKey]; 
     notif.userInfo = userDict; 
     // NSLog(@"userInfo %@",notif.userInfo); 
     [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
     [notif release]; 
     [[NSUserDefaults standardUserDefaults] setObject:@"CurrentDay" forKey:@"DayChange"]; 
     } 
1

Симулятор или реальное устройство?

Симулятор имеет известную ошибку, в которой он генерирует два «огня» одного уведомления. Если это то, что происходит, попробуйте на физическом устройстве и посмотрите, происходит ли такое же поведение. Это раздражает, но не актуальная проблема с вашим приложением. (Предполагается, что это симулятор, конечно!)

Смотрите этот вопрос: iOS – UILocalNotification fired twice for same notification

Edit, основанный на «не в симуляторе»:

попробуйте добавить вызов к этому после того, как запланировать уведомление, и увидеть, если какой-либо другой части кода проскальзывает в другом запланированном пункте вы не в курсе:

- (void) _debug_logExistingToConsole 
{ 
    if (LOG) NSLog(@"Notifications set is now: \n"); 
    UIApplication *Ap = [UIApplication sharedApplication]; 
    NSArray* arr = [Ap scheduledLocalNotifications]; 
    if (LOG) NSLog(@"%@", arr); 
} 
+0

это происходит в реальном устройстве .... – Madhuri

+0

И вы на 100% уверены, что код уведомления не работает дважды? –

+0

yes i m sure .... – Madhuri

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