我希望我的应用在给定时间发送一个通知并每天重复。通知发送正常,但它发送多个通知。因此,它不发送1,而是发送5.如何使用代码修复此问题。如果有意义,我有2个viewcontrollers。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// ask for permission for notifications
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound], completionHandler: {didAllow, error in
})
// making the content of the notification
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.title = "Get Motivated"
content.body = "Need Some Motivation? We've Got Plenty!"
content.sound = UNNotificationSound.default()
//triggering notification
var dateComponents = DateComponents()
dateComponents.hour = 13
dateComponents.minute = 35
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
答案 0 :(得分:0)
如果没有看到更多的代码,有点难以准确,如果我误解了某些内容,请原谅我。不过,这里有一些建议:
每次您的视图控制器" viewDidLoad"方法被调用。对于一些上下文,在早期版本的iOS中,为了节省内存,当从视图层次结构中删除视图时(例如,在转换到不同的全屏视图之后),视图从内存中卸载;它已不再用了,但是" viewDidLoad"不保证在给定视图控制器的生命周期内只调用一次。除此之外,如果您多次实例化并呈现此类的视图控制器," viewDidLoad"将被多次调用。
您的代码似乎也没有考虑到应用可能会多次启动的可能性。
为了确保只安排一个通知,您可以:
您选择的方法当然取决于您应用的逻辑。
祝你好运!