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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3292閲覧

Swift LocalNotificationで通知時間を指定したい

mmmm

総合スコア54

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/10/16 08:29

編集2015/10/16 08:34

###前提・実現したいこと
Swiftでtodoアプリを作成しており、ユーザーが指定時刻した時間に通知したいです。

###発生している問題・エラーメッセージ
以下のように現時刻から5秒後の通知はできるのですが、UIDatePickerなどから取得した時間を設定したいです。
fireDateプロパティへNSDate型で時間を代入すればできるようなのですが、String型からNSDate型への変換がうまくいってないようです。
ご教示お願いします。
###ソースコード

let notification = UILocalNotification()
notification.fireDate = NSDate(timeIntervalSinceNow: 5);
notification.timeZone = NSTimeZone.defaultTimeZone()
notification.alertBody = "通知だよ"
notification.alertAction = "OK"
notification.soundName = UILocalNotificationDefaultSoundName
UIApplication.sharedApplication().scheduleLocalNotification(notification);

エラー
let todo = Todo()
let data = todo.date.dataUsingEncoding(NSUTF8StringEncoding)
※TodoクラスのdateプロパティにDatePickerから取得したstring型のデータが格納されています。

let notification = UILocalNotification()
notification.fireDate = data
notification.timeZone = NSTimeZone.defaultTimeZone()
notification.alertBody = "通知だよ"
notification.alertAction = "OK"
notification.soundName = UILocalNotificationDefaultSoundName
UIApplication.sharedApplication().scheduleLocalNotification(notification);

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

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

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

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

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

guest

回答1

0

ベストアンサー

String型はどこから出てきたのでしょう?
NSDatePickerで取得したdate(NSDate型)をそのまま渡せばいいのではないでしょうか?


String型を介する現在のやり方での解決方法

NSDateFormatter.dateFromStringを使えば、StringからNSDateを生成出来ます。

swift

1notification.fireDate = myDateFormatter.dateFromString(mySelectedDate)

ただし、現在のフォーマット("yyyy/MM/dd hh:mm")では「時」の情報が欠落することがあります。
hhは12時間制のフォーマットなので、24時間制のHHにして下さい。

投稿2015/10/16 08:36

編集2015/10/16 09:20
fuzzball

総合スコア16731

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

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

mmmm

2015/10/16 08:42

ご回答ありがとうございます。 上記のNotificationの設定はAppDelegateクラスに記載しております。 別クラスに以下のようにNSDatePickerで取得したdateをStringに変換して保存しております。 NSDatePickerで取得したdate(別クラスで取得)をAppDelegateクラスに渡すにはどうすればよいのでしょうか。 myDatePicker.addTarget(self, action: "onDidChangeDate:", forControlEvents: .ValueChanged) internal func onDidChangeDate(sender: UIDatePicker){ let myDateFormatter = NSDateFormatter() myDateFormatter.locale = NSLocale(localeIdentifier: "ja_JP") myDateFormatter.dateFormat = "yyyy/MM/dd hh:mm" // 日付をフォーマットに則って取得. let mySelectedDate: NSString = myDateFormatter.stringFromDate(sender.date) dateField.text = mySelectedDate as String
fuzzball

2015/10/16 09:05

NSDate型だから特別というわけでもなく、String型と同じように保存すればいいと思います。dateFieldが何なのかよく分かりませんが、dateField.date = sender.date みたいな感じでダメですか?
fuzzball

2015/10/16 09:21

回答に、「String型を介する現在のやり方での解決方法」を追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問