如何正确设置小部件以在macOS上进行后台更新?

问题描述

我正在为macOS构建一个小部件,该小部件仅是macOS的目标。并且,在尝试重新创建另一个timeline(通过getTimeline函数)后,它一直崩溃 它将引发以下错误

由于未捕获的异常“ NSFileHandleOperationException”而终止应用程序,原因:“ ***-[NSConcreteFileHandle fileDescriptor]:无效的参数” 以NSException类型的未捕获异常终止

我认为它是由于缺少方法onBackgroundURLSessionEvents(matching:_:)的实现而产生的,这引起了我对以下文档⬇️

的关注

来自Apple文档:

当您的窗口小部件扩展名处于活动状态(例如提供快照或时间轴时)时,它可以启动后台网络请求。该过程类似于应用程序处理此类请求的方式,在后台下载文件中对此进行了描述。 WidgetKit不会直接恢复您的应用,而是直接激活您的窗口小部件的扩展程序。要处理网络请求的结果,请对小部件的配置使用onBackgroundURLSessionEvents(matching:_ :)修饰符,然后执行以下操作:

存储对完成参数的引用。您在处理所有网络事件之后调用完成处理程序。

使用标识符参数查找启动后台请求时使用的URLSession对象。如果您的窗口小部件扩展名已终止,请使用标识符重新创建URLSession。

调用onBackgroundURLSessionEvents()之后,系统调用您提供给URLSession的URLSessionDelegate的urlSession(_:downloadTask:didFinishDownloadingTo :)方法。传递完所有事件后,系统将调用委托人的urlSessionDidFinishEvents(forBackgroundURLSession :)方法

要在网络请求完成后刷新窗口小部件的时间轴,请从代表的urlSessionDidFinishEvents实现中调用WidgetCenter方法。处理完事件后,请调用先前存储在onBackgroundURLSessionEvents()中的完成处理程序。

问题是urlSessionDidFinishEvents(forBackgroundURLSession:)仅适用于:

OS 7.0+
Mac Catalyst 13.0+
tvOS 9.0+
watchOS 2.0+

对于macOS目标似乎没有等效的想法。那么,我们应该如何设置呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)