如何在 iOS 17.0 中向提醒应用添加项目?

问题描述 投票:0回答:1

我正在构建一个应用程序,允许用户在 iPhone 的日历本机应用程序中添加和创建事件。 我正在开发的功能之一是允许用户在 iPhone 的提醒本机应用程序中添加和创建项目。

据我所知,日历和提醒应用程序可与 EventKit 配合使用,并且从文档来看,每个应用程序的过程并没有太大差异。

我使用此代码来请求访问提醒的权限以及我用来将项目添加到应用程序的代码。

对于为什么它不起作用有什么想法吗? 预先感谢。

import Foundation
import EventKit

class EventModel {
    
    let eventStore  = EKEventStore()
    
    func requestAccessForReminders() {
        let status = EKEventStore.authorizationStatus(for: .reminder)
        if status == .authorized {
            print("EKEventStore access for Reminders already granted.")
        } else {
            eventStore.requestFullAccessToEvents { success, error in
                if success && error == nil {
                    print("EKEventStore access for Reminders has been granted.")
                } else {
                    print("EKEventStore access for Reminders request failed with error: \(error?.localizedDescription ?? "Unknown error")")
                }
            }
        }
    }
    
    func addEventToReminders(title: String, startHour: Int, startMinute: Int, duration: Int) -> Void {
        
        let newEvent = EKReminder(eventStore: self.eventStore)
        
        newEvent.title = title
        newEvent.calendar = self.eventStore.defaultCalendarForNewReminders()
        
        do {
            try eventStore.save(newEvent,
                                commit: true)
        } catch let error {
            print("Reminder failed with error \(error.localizedDescription)")
        }
    }
}

这是我在 info.plist 中的信息。 (我知道是相同的消息,但这不应该是主要原因,对吧?)

ios swift events eventkit
1个回答
0
投票

如果您使用

print
查看保存前的行为,您可能会发现:

print ("defaultCalendarForNewReminders",eventStore.defaultCalendarForNewReminders() as Any)

显示:

defaultCalendarForNewReminders nil

您应该检查

defaultCalendarForNewReminders
,因为它可以为空,但 .calendar 不能为空。

func defaultCalendarForNewReminders() -> EKCalendar?

https://developer.apple.com/documentation/eventkit/ekeventstore/1507543-defaultcalendarfornewreminders

var calendar: EKCalendar! { get set }

https://developer.apple.com/documentation/eventkit/ekcalendaritem/1507169-calendar

如果您使用的是干净的模拟器,则

nil
来自应用程序被授予权限之前的检查。获得权限后,您会看到类似这样的内容:

defaultCalendarForNewReminders Optional(EKCalendar <0x60000212af80> {title = Reminders; type = Local; allowsModify = YES; color = #007AFFFF;})

即使 Reminders.app 从未运行过。

© www.soinside.com 2019 - 2024. All rights reserved.