2016-06-29 11 views
0

私は見回しましたが、答えが見つかりませんでした。設定した時間に毎日コードを実行するにはどうすればよいですか? Swift

誰もが、NSTimerを使わずに12:00に毎日コードブロックを実行する方法を知っていますか?

+0

可視の通知なしでローカルデバイス通知をスケジュールできます - 発生したときにコードが実行されますか? – brandonscript

+0

サイレントプッシュ通知 –

+0

ブランソンその仕事は? – FredInn

答えて

2

これを行うためにディスパッチソースを設定できます。正午までの残り時間を開始時間として取得し、間隔を24時間ごとに設定します。次のようなものがあります。

let startTime = NSCalendar.currentCalendar().nextDateAfterDate(NSDate(), matchingHour: 12, minute: 0, second: 0, options: .MatchNextTime) ?? NSDate() 
let startDelta = startTime.timeIntervalSinceNow * NSTimeInterval(NSEC_PER_SEC) 
let periodicSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()) 

dispatch_source_set_timer(periodicSource, dispatch_walltime(nil, Int64(startDelta)), 60 * 60 * 24 * NSEC_PER_SEC, NSEC_PER_SEC) 
dispatch_source_set_event_handler(periodicSource) { 
    print("bing bong!") 
} 
dispatch_resume(periodicSource) 
関連する問題