2016-08-04 10 views
2

私の質問は私が以下にリンクしたのと同じ質問ですが、 Objective-Cの毎週特定の日に通知を設定する必要がありますが、月の日を気にしません

Fire a notification at a specific day and time every week

問題は、私は、月の月の日と年を指定し、しかし、私ならばしていないので、私が使用している日付は、デフォルトの1月1日であるということです私のアプリが来年や翌月には機能しないので、役に立たないと指定しました

私が望むものはとてもシンプルです。毎週日曜日に通知を設定します

が、それは任意の日曜日または土曜日に動作するはずですので、年や月を指定することは現実的ではない(例えば)

私はすでに多くのことを試してみた私を助けてください:(

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 


components.hour = 2 
components.minute = 54 
components.weekday = 6 

var newDate = calendar.dateFromComponents(components) 
let notification = UILocalNotification() 
notification.fireDate = newDate 
notification.alertBody = "Swipe to unlock" 
notification.alertAction = "You've got a class soon!" 
notification.soundName = UILocalNotificationDefaultSoundName 
notification.userInfo = ["CustomField1": "w00t"] 
notification.timeZone = NSTimeZone.localTimeZone() 
notification.repeatInterval = NSCalendarUnit.WeekOfYear 


UIApplication.sharedApplication().scheduleLocalNotification(notification) 

更新日:

月曜日にのみ動作することはわかっていますが、後で修正できます。 ここで問題となるのは、時と分を0に設定してから現在の時刻を返し、私が望む時間を設定する方法がわかりません。

var pickerDate = NSDate() 
print(pickerDate) 

var dateComponents: NSDateComponents? = nil 
var calendar = NSCalendar.currentCalendar() 


dateComponents = calendar.components(NSCalendarUnit.NSWeekdayCalendarUnit, fromDate: pickerDate) 
var firstMondayOrdinal = 9 - dateComponents!.weekday 
dateComponents = NSDateComponents() 
dateComponents!.day = firstMondayOrdinal 
dateComponents?.hour = 0 
dateComponents?.minute = 0 
var firstMondayDate = calendar.dateByAddingComponents(dateComponents!, toDate: pickerDate, options: NSCalendarOptions(rawValue: 0)) 

dateComponents = NSDateComponents() 
dateComponents?.weekdayOrdinal = 1 



let notification = UILocalNotification() 
notification.fireDate = firstMondayDate 
notification.alertBody = "Swipe to unlock" 
notification.alertAction = "You've got a class soon!" 
notification.soundName = UILocalNotificationDefaultSoundName 
notification.userInfo = ["CustomField1": "w00t"] 
notification.timeZone = NSTimeZone.localTimeZone() 
notification.repeatInterval = NSCalendarUnit.WeekOfYear 


UIApplication.sharedApplication().scheduleLocalNotification(notification) 
+0

あなたの質問は、特定の時刻に次の日曜日に砲火を設定する方法ですか? –

+0

http://stackoverflow.com/a/32518640/2303865 –

+0

mmm毎週特定の曜日に通知を出したいとします。たとえば、毎週月曜日の午前8時に通知を出したいとします。私は日付のコンポーネントでそれを行うことができますが、誰かが来年に私のアプリを開いている場合、それは過去のものになります火災の日付 –

答えて

0

、その日に必要な時間を設定し、weekofyear繰り返し間隔を使用してfiredateとしてそれを使用するカレンダー法dateBySettingHourを使用し、次の日曜日か月曜日の日付(SO answer)を取得します。

関連する問題