2012-07-03 69 views
9

我想實現本地通知iPhone:每日本地通知

這是我已經設置

// Current date 
    NSDate *date = [NSDate date]; 

    // Add one minute to the current time 
    NSDate *dateToFire = [date dateByAddingTimeInterval:20]; 

    // Set the fire date/time 
    [localNotification setFireDate:dateToFire]; 
    [localNotification setTimeZone:[NSTimeZone defaultTimeZone]]; 

而不是20,我想提出一個固定的時間(每天)開始推。

例如:我想在每上午6點推送通知彈出。

該怎麼辦?

感謝

回答

27

你只需要正確地創建一個NSDate對象是你的火日期(時間)。除了使用[NSDate dateByAddingTimeInterval: 20]的,使用這樣的:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay: 3]; 
[components setMonth: 7]; 
[components setYear: 2012]; 
[components setHour: 6]; 
[components setMinute: 0]; 
[components setSecond: 0]; 
[calendar setTimeZone: [NSTimeZone defaultTimeZone]]; 
NSDate *dateToFire = [calendar dateFromComponents:components]; 

Here are the Apple NSDateComponents API docs

然後當你添加日期的通知,重複間隔時間設置爲一天:

[localNotification setFireDate: dateToFire]; 
[localNotification setTimeZone: [NSTimeZone defaultTimeZone]]; 
[localNotification setRepeatInterval: kCFCalendarUnitDay]; 

與所有與日期相關的代碼,如果您的時區使用夏令時,請務必在切換到夏令時期間測試其工作原理。

+0

在控制檯上,我試着找到火災日期,這是「2012-07-03 00:30:00 +0000」我不確定,每天都會這樣火嗎? – iscavengers

+0

@iscavengers,如果您將重複間隔設置爲「kCFCalendarUnitDay」,它會每天觸發,正如我在 – Nate

+0

以上的代碼中所示的那樣,這將如何轉換爲SWIFT? –

3

我猜你需要的是NSDayCalendarUnit

您可以檢查this答案。而here是另一個值得閱讀的教程。

1
NSDate *alertTime = [[NSDate date] dateByAddingTimeInterval:10]; 
    UIApplication* app = [UIApplication sharedApplication]; 

    UILocalNotification* notifyAlarm = [[[UILocalNotification alloc] init] autorelease]; 
    if (notifyAlarm) 
    { 
     notifyAlarm.fireDate = alertTime; 
     notifyAlarm.timeZone = [NSTimeZone defaultTimeZone]; 
     notifyAlarm.repeatInterval = 0; 
     notifyAlarm.soundName = @"Glass.aiff"; 
     notifyAlarm.alertBody = @"Staff meeting in 30 minutes"; 

     [app scheduleLocalNotification:notifyAlarm]; 
    }