我编写了一个 simpel 应用程序来集成并与 Apple Reminders (CRUD) 一起使用。
我遇到的问题是使用calendarItemIdentifier从我的应用程序中打开提醒项目。我获得了标识符,但无法构建有效的 URL 或正确调用 Apple 提醒。
@Environment (\.openURL) private var openUrl
//...
let url = URL(string: "x-apple-reminder://\(reminder.calendarItemIdentifier)")
openUrl(url!)
我收到以下错误消息:
Failed to open URL x-apple-reminder://FB2D0D45-23E9-4851-A86E-636064BA6A39: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)" UserInfo={_LSLine=277, _LSFunction=-[_LSDOpenClient openURL:fileHandle:options:completionHandler:]}
您遇到的错误
(错误域=NSOSStatusErrorDomain代码=-10814)
通常意味着系统找不到处理自定义 URL 方案 (x-apple-reminder://) 的应用程序。不幸的是,Apple Reminders 不支持直接通过 URL 方案打开特定提醒,这就是该方法不起作用的原因。
我使用 EventKit 为您制作了一个简单的解决方案。请注意,这大部分是 2 年前复制的代码,因此可能会有一些已弃用的内容。
这是一种列出提醒的方法,您可能已经实施过:
首先你需要导入必要的框架:
import EventKit
然后您需要请求访问权限:
let eventStore = EKEventStore()
eventStore.requestAccess(to: .reminder) { (granted, error) in
if granted {
// Access granted
} else {
// Show some kind of alert or something, because you got denied.
}
}
获取提醒:
let predicate = eventStore.predicateForReminders(in: nil)
eventStore.fetchReminders(matching: predicate) { reminders in
for reminder in reminders ?? [] {
print("Reminder: \(reminder.title ?? "No title")")
}
}
目前,如果您需要打开 Apple Reminders 应用程序本身,您可以执行以下操作:
let url = URL(string: "x-apple-reminder://")!
openUrl(url)
这将打开“提醒”应用程序,但不是特定的提醒。我会尝试将所有内容包装到自定义类或某物中。因此需要在 init 上请求许可。等等..这也应该使处理边缘情况变得更容易。