2013-01-11 46 views
0

我已經硬編碼了這個小時,以幫助我在每個小時的頂部觸發本地通知,但有些錯誤。雖然,我不知道它是我測試它的方式,我的Xcode行爲還是代碼本身。無論如何,這裏是我編寫的代碼,看看它,請指導我更容易或更好的方式來編寫這樣的事情。謝謝。有沒有更好的方法來計算重複間隔通知的小時代碼的頂部?

NSCalendar *calendar1 = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar1 components:(NSHourCalendarUnit |NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]]; 
hour = [components hour]; 
min =[components minute]; 
sec =[components second]; 
NSLog(@"hour is %i",hour); 

NSLog(@"min is %i",min); 

NSLog(@"sec is %i",sec); 
if (hour < 24) { 
hour=hour+1; 
} else { 
    hour=0; 

然後..

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ; 
NSDateComponents *componentsForReferenceDate = [[NSDateComponents alloc] init]; 
[componentsForReferenceDate setHour:hour]; 
[componentsForReferenceDate setMinute:0]; 
[componentsForReferenceDate setSecond:0]; 

NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForReferenceDate]; 

// Create the notification 
+1

你從來沒有說過什麼竟是出錯了? –

回答

3

有幾件事情要在船上的位置:

  • 要求的日期當你不需要問分鐘和秒鐘,你反正報廢它們。
  • 你或許應該設置時區
  • 當小時是23,你會加1,這使得24是不正確的
  • 你並不需要創建一個新的NSDateComponents對象,你可以配置一個你有

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    calendar.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
    
    NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:[NSDate date]]; 
    components.hour = (components.hour + 1) % 24; 
    components.minute = 0; 
    components.second = 0; 
    
    NSDate *fireDate = [calendar dateFromComponents:components]; 
    NSLog(@"%@", fireDate); 
    

設置小時的使用%阻礙了我們去在23

+0

timeZone = [NSTimeZone localTimeZone];和timeZone = [NSTimeZone defaultTimeZone]; ?哪個更好用? – user1949873

2

你是不是您展示如何創建通知,但重複每隔一小時會使用NSHourCalendarUnit重複間隔的最佳途徑。

類型爲UILocalNotification的本地通知對象具有名爲repeatInterval的屬性,該屬性確定通知傳送的重複間隔。

notification.repeatInterval = NSHourCalendarUnit; 

您的通知將重複每隔一小時,根據您指定的時間,讓你在NSDate正確設置的一切,我認爲只需要設置按repeatInterval。

相關問題