質問編集履歴

1

調べたことを追記しました

2021/05/26 04:03

投稿

Sagamaru
Sagamaru

スコア70

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,103 @@
26
26
 
27
27
  ### 調べたこと
28
28
 
29
+ #### Timerクラス
30
+
31
+ Timerクラスを使って1秒ごとに時刻を表示するサンプルを作りました。
32
+
33
+ 例えば定期的に現在時刻をチェックして、特定の日時になったらアラームを発火するということを行えば今回の仕様を満たせそうに思えました。しかし、アプリがバックグラウンドに行くとTimerクラスが停止して処理が動かないことがわかりました。バックグラウンド中でもアラームは鳴らしたいのですが、こちらでは実現できませんでした。
34
+
35
+ ```ここに言語を入力
36
+
37
+ class TimerTest {
38
+
39
+ var timer = Timer()
40
+
41
+ var count = 0
42
+
43
+ var date: Date?
44
+
45
+
46
+
47
+ func start(){
48
+
49
+ date = Date()
50
+
51
+ // 1秒ごとに発火するタイマーを設定する
52
+
53
+ timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.task), userInfo: nil, repeats: true)
54
+
55
+ }
56
+
57
+
58
+
59
+ func stop(){
60
+
61
+ timer.invalidate()
62
+
63
+ }
64
+
65
+
66
+
67
+ @objc func task() {
68
+
69
+ guard let timeZoneJP = TimeZone(identifier: "Asia/Tokyo") else { return }
70
+
71
+ guard let targetDate = date else { return }
72
+
73
+ var calender = Calendar.current
74
+
75
+ calender.timeZone = timeZoneJP
76
+
77
+ // Dateを1秒づつ進める
78
+
79
+ count += 1
80
+
81
+ let advanceDate = calender.date(byAdding: .second, value: count, to: targetDate)!
82
+
83
+ // Dateから時刻に関係する各要素を取得する
84
+
85
+ let comp = calender.dateComponents(
86
+
87
+ [Calendar.Component.year, Calendar.Component.month, Calendar.Component.weekday,
88
+
89
+ Calendar.Component.day,
90
+
91
+ Calendar.Component.hour, Calendar.Component.minute, Calendar.Component.second],
92
+
93
+ from: advanceDate)
94
+
95
+ guard let year = comp.year else { return }
96
+
97
+ guard let month = comp.month else { return }
98
+
99
+ guard let day = comp.day else { return }
100
+
101
+ guard let weekday = comp.weekday else { return }
102
+
103
+ guard let hour = comp.hour else { return }
104
+
105
+ guard let minute = comp.minute else { return }
106
+
107
+ guard let second = comp.second else { return }
108
+
109
+ print("年:(year) 月:(month) 日:(day) 曜日:(weekday) 時間:(hour) 分: (minute) 秒:(second)")
110
+
111
+
112
+
113
+ }
114
+
115
+ }
116
+
117
+ ```
118
+
119
+
120
+
121
+ #### ローカル通知
122
+
123
+
124
+
29
- アプリがバックグラウンド中でもアラーム発火させたいのでローカル通知を検討しました。
125
+ アプリがバックグラウンド中でもアラーム発火させめにローカル通知を検討しました。
30
126
 
31
127
  こちらの2つのクラスに注目しました。
32
128
 
@@ -56,6 +152,4 @@
56
152
 
57
153
 
58
154
 
59
- もしかするとローカル通知に注目していること自体がズレているのではないかと不安に感じていて、
60
-
61
- 根本的に考え方が間違っていたらご指摘いただけると大変助かります。お手数ですがご回答お待ちしております。
155
+ お手数ですがご回答お待ちしております。