2011-07-22 96 views
0

在我的我使用的是一個操作選單視圖。它工作正常。但是我想在time picker中設置特定時間時觸發local notification,它不會觸發local notification。我使用這段代碼:本地通知不在iphone中觸發

enter code here 

     - (void)actionPickerDone { 

     if (nil != self.data) { 
//send data picker message[self.target performSelector:self.action  withObject:[NSNumbernumberWithInt:self.selectedIndex]]; 
     } 
else { 
    //send date picker message 
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 

    // Get the current date 
    NSDate *pickerDate = [self.datePicker date]; 
    // Break the date up into components 
    NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                fromDate:pickerDate]; 
    NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
                fromDate:pickerDate]; 

    // Set up the fire time 
    NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
    [dateComps setDay:[dateComponents day]]; 
    [dateComps setMonth:[dateComponents month]]; 
    [dateComps setYear:[dateComponents year]]; 
    [dateComps setHour:[timeComponents hour]]; 
    // Notification will fire in one minute 
    [dateComps setMinute:[timeComponents minute]]; 
    [dateComps setSecond:[timeComponents second]]; 
    NSDate *itemDate = [calendar dateFromComponents:dateComps]; 
    [dateComps release]; 

    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    if (localNotif == nil) 
     return; 
    localNotif.fireDate = itemDate; 
      NSLog(@"%@what is this",itemDate); 
    localNotif.timeZone = [NSTimeZone defaultTimeZone]; 
      NSLog(@"i8i8i88i"); 

    // Notification details 
    //localNotif.alertBody = [eventText text]; 
    // Set the action button 
    localNotif.alertAction = @"View"; 

    localNotif.soundName = UILocalNotificationDefaultSoundName; 
    localNotif.applicationIconBadgeNumber = 1; 

    // Specify custom data for the notification 
    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"]; 
    localNotif.userInfo = infoDict; 

    // Schedule the notification 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 
    [localNotif release]; 
    } 

這段代碼有什麼不對嗎?請幫助我。

+0

當通知應該被觸發時,您的應用程序是否處於前臺?如果是這樣,則不會看到提醒,只會觸發didRecieveLocalNotification回調。 – Idan

回答

6

我執行了你的代碼,通知沒有觸發。然後我取消了localNotif.alertBody賦值語句的註釋,並且它觸發了。如果您未指定alertBody,則本地通知不會顯示爲警報。再加上Idan提出的觀點也是有效的。如果你的應用程序處於前臺,notif不會顯示,相反,你會在你的應用程序委託中得到一個回調,你應該在其中顯示一條警告消息notification.alertBody以保持一致性。

希望這有助於:)你不

PS所需要的所有組件壓延事youre做。記錄他們,你會發現pickerDate和itemDate都是一樣的。

+0

可以請你告訴我,而不是[eventText文本];你給了那裏.. – ishhhh

+0

我剛剛寫了'localNotif.alertBody = @「本地通知」;'基本上它需要一個stirng。只需檢查'[eventText文本]'不應該爲空或空字符串 –

+0

它工作的傢伙..感謝 – ishhhh