You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用@available排除tvOS的通知响应方法以解决编译报错?

解决tvOS下UserNotifications代理方法编译报错问题

针对你遇到的tvOS编译报错,有两种可靠的解决方式:

方法一:用@available明确标记tvOS不可用

在你的代理方法前添加完整的平台可用性声明,既要指定支持的平台,又要明确排除tvOS:

@available(iOS 10.0, iPadOS 10.0, macOS 10.14, watchOS 3.0, tvOS, unavailable)
override func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    // 这里编写你的通知响应处理逻辑
    completionHandler()
}

之前只加@available(iOS 10.0, *)没用的原因是,*会匹配所有平台,编译器仍会尝试在tvOS下编译该方法,而tvOS中UNNotificationResponse本身就不可用,且该代理方法在tvOS的UNUserNotificationCenterDelegate中不存在,所以触发报错。加上tvOS, unavailable后,编译器会跳过tvOS平台下该方法的编译,直接忽略。

方法二:使用条件编译指令跳过tvOS编译

如果更习惯用条件编译,可以直接用!os(tvOS)包裹整个方法,让tvOS编译时跳过这段代码:

#if !os(tvOS)
override func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    // 这里编写你的通知响应处理逻辑
    completionHandler()
}
#endif

注意平台标识要写对,tvOS的正确标识是tvOS(首字母小写,其余大写),之前写错标识导致无效的话,修正后就能正常生效。

两种方法都能解决你遇到的UNNotificationResponse不可用和重写不可用方法的报错,选你觉得更顺手的即可。

内容的提问来源于stack exchange,提问作者NightFuryLxD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:24:58