在Xcode 11.4 / iOS 13.4中,我发现NSUserActivity并不总是响应setSuggestedInvocationPhrase

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

我有一个用于成功创建和更新NSUserActivity对象以提供Siri快捷方式和切换的项目。今天,我一段时间以来第一次返回到此代码,并惊讶地发现,如果我在设备上构建了调试版本,并且在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”,并且当我从调试器运行它时,它does。但是,如果我独立启动该应用程序,则会收到“ setSuggestedInvocationPhrase如果您调用它将崩溃”。代替。

其他人看到过这样的东西吗?如果是这样,在硬件上升级到Xcode 11.4和/或iOS 13.4之后,它是否开始发生?现在,我已经可以在iPod Touch,iPhone 11 Pro Max和iPhone 8的模拟器中重现此图像。

目前,我正在通过在设置短语之前显式检查respondsToSelector来解决此问题,但是从长远来看,这不是一个很好的解决方案。

ios sirikit nsuseractivity intents-extension
1个回答
0
投票

我提交了“反馈助理”请求,Apple Engineering回复了我。我没有在目标中显式链接Intents.framework。 without它used可以不使用而工作,但是现在失败了。我不确定为什么附加调试器会插入Intents,但无论如何显然我应该显式链接它并解决了此问题。

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