首页 > 解决方案 > 显示来自 iOS 广播扩展的自定义错误消息

问题描述

我的应用程序包由主应用程序(普通 iOS 应用程序)和广播扩展程序(ReplayKit 2)组成。我的应用程序包含一个按钮 ( RPSystemBroadcastPickerView),它会打开一个系统弹出窗口以选择广播扩展程序并启动它。

这个对扩展内广播扩展的状态没有太多控制,但是继承的扩展类RPBroadcastSampleHandler有一个有用的方法(finishBroadcastWithError),它允许我们从扩展触发失败(这反过来会结束扩展的进程并显示一个弹出窗口,显示错误和 2 个按钮)。

finishBroadcastWithError方法接受错误作为参数。但是,文档中绝对没有关于如何自定义此系统弹出窗口中显示的错误消息的信息。

我尝试谷歌以了解如何设置错误消息,因为我看到了一些应用程序(Mobcrush),当出现此弹出窗口时,它们以某种方式能够设置自定义错误消息。为了获得更多信息,我观看了来自 WWDC 2017 和 WWDC 2018 的关于 ReplayKit 2 的两个视频,唯一提到 Replay Kit 2 中的错误处理的幻灯片是演示以下代码的幻灯片:

let userInfo = [NSLocalizedFailureReasonErrorKey : "Not Logged In"]
let error = NSError(domain: "RPBroadcastErrorDomain", code: 401, userInfo: userInfo)
finishBroadcastWithError(error)

我立即尝试了它,但不幸的是它对错误弹出窗口中显示的错误没有任何影响。我假设它要么是 Replay Kit 2 中的一些错误,要么是某些内容已更改并且没有正确记录(由于某种原因,Replay Kit 2 的记录不充分,我不得不从不同来源收集信息来编写一个应用程序作品)。

我什至尝试在字典中设置多个不同的键,希望其中至少一个会更改弹出窗口中的错误消息,但它们都不起作用。

func stop(message error: String) {
    let userInfo = [NSLocalizedDescriptionKey : error,
                    NSLocalizedRecoverySuggestionErrorKey : error,
                    NSLocalizedFailureErrorKey : error]
    let error = NSError(domain: "RPBroadcastErrorDomain", code: 1, userInfo: userInfo)
    finishBroadcastWithError(error)
}

我错过了文档中的某些内容吗?是否有任何“官方”方式来更改错误消息?

标签: iosswiftreplaykit

解决方案


我收到了使用这组参数的自定义错误:

let userInfo = [NSLocalizedFailureReasonErrorKey: "failed to broadcast because...."]
NSError(domain: "ScreenShare", code: -1, userInfo: userInfo)

推荐阅读