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

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

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

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

Swift 2

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

Q&A

解決済

1回答

2670閲覧

Swiftで隔週、3ヶ月毎、半年毎に繰返し通知をする方法

eizi

総合スコア13

Swift

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

Swift 2

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

0グッド

0クリップ

投稿2016/04/08 11:58

UILocalNotificationのローカル通知で毎週、毎月、毎年と繰返し設定ができるようになったのですが、掲題の通り隔週、3ヶ月毎、半年毎に通知をする方法を色々とググッて探してみたのですが、辿りつけずこちらに質問させていただきました。

ソースはざっくりですが、下記の通りです。

Swift

1 // ViewController.swift 2 let notification = UILocalNotification() 3 notification.alertAction = "開く" 4 notification.alertBody = "通知テスト" 5 notification.timeZone = NSTimeZone.defaultTimeZone() 6 7 let repeatNum = 3 8 9 switch repeatNum { 10 case 1: 11 // 毎週 12 notification.repeatInterval = NSCalendarUnit.WeekOfYear 13 case 2: 14 // 隔週 15 case 3: 16 // 毎月 17 notification.repeatInterval = NSCalendarUnit.Month 18 case 4: 19 // 3ヶ月毎 20 case 5: 21 // 半年 22 case 6: 23 // 毎年 24 notification.repeatInterval = NSCalendarUnit.Year 25 default: 26 break 27 } 28 29 notification.fireDate = NSDate(timeIntervalSinceNow:30) 30 UIApplication.sharedApplication().scheduleLocalNotification(notification)

ちなみに確認自体は、端末の時計機能を変更しつつ、下記のプリント文で出力された next fire dateを確認しながら行いました。

Swift

1print("通知データ = ",UIApplication.sharedApplication().scheduledLocalNotifications)

環境
Xcode 7.3
Swift 2.2

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードを書けないのでサラッと回答しますが、repeatIntervalを使わず、発火したときに改めてfireDateを設定し直せば、自由な周期で通知できます。

投稿2016/04/08 14:05

fuzzball

総合スコア16731

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

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

eizi

2016/04/08 22:48

自分が確認した限りでは、発火時の通知バナーをタップすれば発火した通知の内容を確認でき、ご指摘の通り、userinfoの内容から判断して再設定しなおせばできるのですが、通知バナーをタップせずにアプリを直接開くと通知の内容が削除されてそれを確認できませんでした。 あるいは自分が通知内容を確認できる箇所を見落としているのでしょうか?
eizi

2016/04/09 03:47

それですね。 自分も UIApplication.sharedApplication().scheduledLocalNotifications から消えてたらってのを考えたのですが、それの管理をしなくちゃいけないのと、結局はユーザーがアプリを開くというアクションをしないと、初回の次の隔週っていう通知が来ないなと思ってスルーしてました。 隔週を過ぎてもアプリが開かれないなら使われないだろうし(笑)、仕様的にユーザーのアクションを待つ感じが良さそうですかね
fuzzball

2016/04/09 04:02

最初にまとめて登録しておくとか。 repeatIntervalを使えるやつはそれで登録して、それ以外は個別に登録。上限が64個なので向こう2年分くらいは登録できそうです。 個人的な意見としては、起動を促すだけの通知は控えめにした方が良いとは思います。
eizi

2016/04/09 04:25 編集

管理の手間を考えると、最初にまとめてを登録するのは良さそうですね ちょっとその方向で考えてみたいと思います。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問