前提・実現したいこと
SwiftUIにて、指定した時間になるとローカル通知が発火し、その通知の本文などにAPIで取得した文字列を載せたいです。
発生している問題・エラーメッセージ
通知が発火し、APIから文字列を取得しているところまで確認ができたのですが、肝心の通知には取得した文字列が反映されず、「初期値」のままになります。
該当のソースコード
SwiftUI
1import Foundation 2 3class APIRun: NSObject,ObservableObject,XMLParserDelegate{ 4 5 @Published var meigen = "初期値" 6 @Published var auther = "初期値" 7 private var element = "" 8 9 func getMeigen(){ 10 11 guard let req_url = URL(string: "http://meigen.doodlenote.net/api?c=1") else{ return } 12 13 let req = URLRequest(url: req_url) 14 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 15 16 let task = session.dataTask(with: req,completionHandler: {(data,response,error) in session.finishTasksAndInvalidate() 17 guard let data = data else{ return } 18 let parser = XMLParser(data: data) 19 parser.delegate = self 20 parser.parse() 21 }) 22 23 task.resume() 24 } 25 26 func parserDidStartDocument(_ parser: XMLParser) { 27 28 } 29 30 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { 31 element = elementName 32 if element == "response"{ 33 meigen = "" 34 auther = "" 35 } 36 } 37 38 func parser(_ parser: XMLParser, foundCharacters string: String) { 39 switch element { 40 case "meigen": 41 meigen += string 42 case "auther": 43 auther += string 44 default: 45 break 46 } 47 } 48 49 func parserDidEndDocument(_ parser: XMLParser) { 50 51 } 52 53 func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { 54 print("エラー:" + parseError.localizedDescription) 55 } 56} 57
SwiftUI
1import Foundation 2import UserNotifications 3import SwiftUI 4 5struct TimeNotification { 6 7 @Binding var date: Date 8 let apiRun = APIRun() 9 10 init(date: Binding<Date>) { 11 self._date = date 12 } 13 14 func basedOnTimeNotification(){ 15 16 apiRun.getMeigen() 17 18 let center = UNUserNotificationCenter.current() 19 let content = UNMutableNotificationContent() 20 21 content.subtitle = apiRun.auther 22 content.body = apiRun.meigen 23 24 let component = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: date) 25 let trigger = UNCalendarNotificationTrigger(dateMatching: component, repeats: false) 26 let identifier = NSUUID().uuidString 27 let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) 28 center.add(request){ (error : Error?) in 29 if let error = error { 30 print(error.localizedDescription) 31 } 32 } 33 } 34} 35
SwiftUI
1import SwiftUI 2 3struct ContentView: View { 4 5 @State var date = Date() 6 7 var body: some View { 8 VStack{ 9 10 DatePicker("", selection: $date) 11 .labelsHidden() 12 .padding() 13 14 Button("発火"){ 15 TimeNotification(date: $date).basedOnTimeNotification() 16 } 17 } 18 } 19}
回答1件
あなたの回答
tips
プレビュー