如何使用

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

我编写了一个 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:]}
swiftui deep-linking
1个回答
0
投票

您遇到的错误

(错误域=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 上请求许可。等等..这也应该使处理边缘情况变得更容易。

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