質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1899閲覧

swiftで簡単なアラームを実現したい2

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

4クリップ

投稿2018/01/17 06:47

###前提・実現したいこと
swiftで目覚ましみたいなものを作りたいと思っています
プログラミング始めたばっかりの初心者なので、失礼なことをするかと思いますが何卒よろしくお願いします
指定した時間になったら通知と音楽がなるようにしたい

###発生している問題・エラーメッセージ

指定した時間になると、通知と音楽が来るようにしたいがうまくいかないので実現したい。

###該当のソースコード

swift

1import UIKit 2import AudioToolbox 3 4class ViewController: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // Do any additional setup after loading the view, typically from a nib. 9 10 myLabel.text = getNowTime() 11 _ = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(ViewController.update(_:)), userInfo: nil, repeats: true) 12 } 13 14 override func didReceiveMemoryWarning() { 15 super.didReceiveMemoryWarning() 16 // Dispose of any resources that can be recreated. 17 } 18 19 @IBOutlet weak var myLabel: UILabel! 20 @IBOutlet weak var myDPvar: UIDatePicker! 21 22 private var tempTime: String = "00:00" 23 private var setTime: String = "00:00" 24 25 @IBAction func myDPFunc(_ sender: Any) { 26 print("test: myDP moved!") 27 let format = DateFormatter() 28 format.dateFormat = "HH:mm" 29 tempTime = format.string(from: myDPvar.date) 30 } 31 32 @IBAction func myButtonFunc(_ sender: Any) { 33 setTime = tempTime 34 print("test: myButton Pushed!") 35 } 36 37 func getNowTime()-> String { 38 let nowTime: Date = Date() 39 let format = DateFormatter() 40 format.dateFormat = "HH:mm" 41 let nowTimeStr = format.string(from: nowTime as Date) 42 return nowTimeStr 43 } 44 45 @objc func update(_: Timer) { 46 let str = getNowTime() 47 myLabel.text = str 48 myAlarm(str: str) 49 } 50 51 func myAlarm(str: String) { 52 if str == setTime{ 53 alert() 54 } 55 } 56 57 func alert() { 58 let myAlert = UIAlertController(title: "alert", message: "ring ding", preferredStyle: .alert) 59 AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 60 let myAction = UIAlertAction(title: "dong",style: .default) { 61 action in print("foo!!") //test 62 } 63 myAlert.addAction(myAction) 64 present(myAlert, animated: true,completion: nil) 65 66 } 67}

###補足情報(言語/FW/ツール等のバージョンなど)
swift xcode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udomomo

2018/01/17 07:04

エラーコードが出るのか、それとも動くことは動くが通知が来ないのかどちらでしょうか?プッシュ通知を送るためには、Dev Centerでの証明書発行など、Swiftのコードだけでは完結しない作業が必要です。通知が来ないのであれば、手続きに漏れがないか確認してみてください。
fuzzball

2018/01/17 07:17

プッシュ通知じゃないですよ。
退会済みユーザー

退会済みユーザー

2018/01/17 08:05

ありがとうございます。通知はコード以外の編集が必要だということがわかりました。時間が来たら音楽を流すだけでも実装できたらなと思います。
guest

回答1

0

ベストアンサー

アラームは、意外と初心者に難しいものかと思います。なぜかというと Timer だけでは作れないからです。

まず、アラームアプリというのは、アプリが立ち上がっていない時にアラームが鳴るのがよくあることです。ですのでアプリが立ち上がってる前提で動くソースコードは基本的に全滅だと考えてください。ここの Timer.scheduledTimer... の部分で作ったタイマーは、アプリがバックグラウンドに入ったらもう動かないのです。

ではどう作ればいいかというと、バックグラウンドでも通知を出す仕組みを利用する必要があるのです。「iOS ローカル通知」でググれば記事がたくさん出ます。

大まかなやり方としては、例えば60秒後にアラームが鳴るというものを作るとします。そしたらまず60秒後の Date を特定する必要があります。次に UNNotification 作ってその時間になったら通知を出すということをOSに予約します。最後通知を受け取ったとき、アプリが立ち上がっているか立ち上がっていないかによって違うメソッドが呼ばれますが、それらのメソッドに必要な処理を入れます。ちなみに通知を出すということは、ユーザに通知を出す権限を取得する必要もありますので、その権限を取得するための処理も最初に入れる必要があります。利用するライブラリーも標準のUIKit以外に、UserNotificationsも使う必要があります。

ですので、初心者にはあまりお勧めしにくいですが、もしどうしても今すぐ作ってみたい!という気持ちでしたら、こちらなどのサンプルを読みながら作ってみることをお勧めします:

https://qiita.com/mshrwtnb/items/3135e931eedc97479bb5
http://uruly.xyz/uilocalnotificationでローカル通知を実装する【swift】/

投稿2018/01/17 08:19

lovee

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/17 16:18

ありがとうございます、やっぱり初心者には厳しいですよね。サンプルは参考にさせてもらいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問