У меня проблема с обновлением фона моего приложения, когда оно не закрыто, и пользователь переходит к нему, пока оно еще открыто.
Это приложение дня с 4 Контроллеры представления (первый показывает слово, второй показывает определение и т. Д. c), каждый из которых соединен одной кнопкой и одним переходом, а затем выходит на 4-й V C. В настоящее время он работает как задумано и обновляет новое слово каждый календарный день , если приложение закрывается и открывается снова в новый день .
Если приложение не закрывается и новый календарный день как произошло, я все еще могу обновить sh только первый V C немедленно , чтобы показать новое слово, если пользователь возвращается к приложению. Кажется, я не могу переосмыслить sh других 3 V C, чтобы они сохраняли старые метки до перезапуска приложения. Можете ли вы просто добавить NotificationCenter.default.addObserver
к каждому V C?
Испытывая различные варианты NotificationCenter.default.addObserver
для других VC, я смог кратко обновить второй V C на долю секунды, если тот V C был тем, который был открыт, когда пользователь перемещался назад, используя кнопка домой или кнопка приложения. Я пытался исследовать эту проблему и не могу найти отличный ответ - что мне не хватает?
Main V C
import UIKit
import UserNotifications
// 31 total words, removed for simplification
let wordList =
[
Words(word: "aaaa", pronounciation: "bbbb", type: "noun", definition: "blah"),
Words(word: "bbbb", pronounciation: "cccc", type: "adjective", definition: "blahb")
]
// Global variables to pull in other VCs
let currentDay = Calendar.current.component(.day, from: Date())
let wordOfDay = wordList[currentDay - 1]
class ViewController: UIViewController {
@IBOutlet weak var wordLabel: UILabel!
@IBOutlet weak var pronounciationLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// local push notifications
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.title = "Word of the Day"
content.body = wordOfDay.word + " | " + wordOfDay.definition
content.sound = UNNotificationSound.default
content.threadIdentifier = "local-notifications temp"
let date = Date()
var dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date)
dateComponents.hour = 10
dateComponents.minute = 0
dateComponents.second = 0
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: "content", content: content, trigger: trigger)
// refresh background and update new word
NotificationCenter.default.addObserver(self, selector: #selector(self.applicationDidBecomeActive),
name: UIApplication.didBecomeActiveNotification, //
object: nil)
center.add(request) { (error) in
if error != nil {
print(error)
}
}
}
@IBAction func prepareForUnwind (segue: UIStoryboardSegue){}
@objc func applicationDidBecomeActive() {
let currentDay = Calendar.current.component(.day, from: Date())
let wordOfDay = wordList[currentDay - 1]
wordLabel.text = wordOfDay.word
pronounciationLabel.text = wordOfDay.pronounciation
}
}
Вот второй V C.
import UIKit
import UserNotifications
class WordViewController: UIViewController {
@IBOutlet weak var definitionLabel: UILabel!
@IBOutlet weak var typeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
definitionLabel.text = wordOfDay.definition
typeLabel.text = wordOfDay.type
NotificationCenter.default.addObserver(self, selector: #selector(self.applicationDidBecomeActive1),
name: UIApplication.didBecomeActiveNotification, //
object: nil)
}
@objc func applicationDidBecomeActive1() {
let currentDay = Calendar.current.component(.day, from: Date())
let wordOfDay = wordList[currentDay - 1]
definitionLabel.text = wordOfDay.definition
typeLabel.text = wordOfDay.type