ios - 在 Xcode 11.4/iOS 13.4 我发现 NSUserActivity 并不总是响应 setSuggestedInvocationPhrase
问题描述
我有一个项目用于成功创建和更新NSUserActivity
对象以提供 Siri 快捷方式和 Handoff。今天我第一次返回这段代码,有点惊讶地发现,如果我在设备上进行了调试构建并从 Springboard 运行它,它会崩溃并显示无法识别的选择器消息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSUserActivity setSuggestedInvocationPhrase:]: unrecognized selector sent to instance 0x280083580'
这个完全相同的二进制文件很好,当我运行它附加到调试器时。我不知道问题出在哪里。我创建了一个非常简单的测试应用程序,它表现出相同的行为。这是一个演示问题的简单 SwiftUI 视图:
import SwiftUI
import Intents
struct ContentView: View {
var body: some View {
if testForSelector() {
return Text("You can call setSuggestedInvocationPhrase")
} else {
return Text("setSuggestedInvocationPhrase will crash if you call it.")
}
}
}
extension ContentView {
func testForSelector() -> Bool {
let activity = NSUserActivity(activityType: "Testing Activity")
return activity.responds(to: #selector(setter: INIntent.suggestedInvocationPhrase))
}
}
我认为这段代码应该总是显示“你可以调用 setSuggestedInvocationPhrase”,当我从调试器运行它时它会显示。但是,如果我独立启动应用程序,我会得到“如果你调用它,setSuggestedInvocationPhrase 将会崩溃”。反而。
有没有其他人见过这样的事情?如果是这样,它是否在您在硬件上升级到 Xcode 11.4 和/或 iOS 13.4 后开始发生?我现在已经能够在 iPod Touch、iPhone 11 Pro Max 和 iPhone 8 的模拟器中重现这一点。
目前我正在通过respondsToSelector
在设置短语之前明确检查来解决这个问题,但这不是一个很好的长期解决方案。
解决方案
我提交了一个反馈助理请求,Apple Engineering 回复了我。我没有Intents.framework
在目标中明确链接。过去没有它,它可以工作,但现在它失败了。我不确定为什么附加调试器会拉入Intents
,但无论如何我应该明确地链接它并解决这个问题。
推荐阅读
- python - 通过 ZipFile.setpassword 命令使用变量
- facebook - 是否可以确定液体中的图像宽度和高度?
- c# - 在 C# 中按字段排序并通过另一个字段检查是否相等
- android - 如何更改通知徽章 Android
- virtualbox - 尝试启动 WebOS TV 模拟器时如何解决此错误?
- r - 基于来自观察事件的数据帧可输出
- javascript - index.html:1 Uncaught ReferenceError: VARIABLE 未在 HTMLDivElement.onclick 中定义
- vba - 替换特殊字符有时不起作用(MS Access/VBA)
- java - 在android studio中的按钮上显示带有计时器的锁定按钮
- mapbox - 单击开始导航时 Mapbox 导航崩溃