问题标签 [nsuseractivity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 硬编码 NSUserActivityTypes 以恢复不同的数据模型
从 iOS 13 开始,Apple 建议使用附加到场景的 NSUserActivity 对象来存储用户状态,因此我一直在尝试 a) 更好地理解 NSUserActivity 的工作原理和 b) 在我自己的代码中实现它。在阅读 Apple 的文档时,我遇到了这段代码:
我明白这是在做什么(它在 Info.plist 文件中查找名为“NSUserActivityTypes”的条目,如果存在,它会尝试获取关联的 activityTypes 数组,然后读取数组中的第一项),但是什么我不明白是为什么。特别是,我不明白为什么我们只读取 activityArray 中的第一项。在这种情况下,我们知道第一项(也是唯一一项)是“com.apple.apple-samplecode.StateRestoration.activity”,因为我们必须手动创建该 plist 条目。但我不明白为什么我们要硬编码查看数组的第一项以获取活动类型,因为如果我们知道我们只是要取回字符串“com.apple.apple-samplecode”。 StateRestoration.activity",
我以前从未使用过 NSUserActivity,并且我知道它可以(通常是?)用于状态保存/恢复以外的其他事情,因此您的应用程序可以支持许多不同类型的用户活动(切换、Siri 集成, ETC。)。所以我会假设我们希望我们的代码尽可能的健壮,不要对我们可能收到的 NSUserActivity 对象的种类做任何假设。
也许对 NSUserActivity 有更多经验的人可以帮助解释将 NSUserActivity 传递给我的应用程序的方式,以及为什么我们可以在数组的第一个元素中硬编码,而在其他地方我们想检查是否传入活动是正确的活动(即使我们知道我们支持的活动数组只有一种活动,所以大概我们一开始只会收到一种活动?)。
此外,这并不是 Apple 的示例代码所独有的……这篇博文在阅读 Info.plist 文件时也采用了类似的方法:
ios - 如何强制 NSUserActivity 保存?
NSUserActivity 有一个方法 setNeedsSave:。
不幸的是,它不会立即保存,而只是告诉用户活动对象将来应该保存它。如果发生崩溃,可能无法保存状态。因此,崩溃后状态可能无法恢复。
是否存在任何解决方法?是否可以自己在一个类别中为 NSUserActivity 实现方法 save 以强制它在每次状态更新时保存,而不仅仅是在系统决定进行保存时?
ios - 新请求场景的 NSUserActivity 没有用户信息
在我的应用程序中,我有一个表格视图,其中每个单元格代表一个文件 URL。用户可以点击一个单元格,然后UIScene
将打开一个代表该文件的新单元格...
正如您在上面的代码片段中看到的,我将 URL 存储在NSUserActivity
传递给UIScene
.
我的问题是userInfo
在新场景中总是空的。
调试器命令...
我通过设置用户活动的标题进行了实验(我不在我的应用程序的任何地方使用活动标题)。标题确实进入了新场景,确认我正在查看的用户活动是正确的。
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 视图:
我认为这段代码应该总是显示“你可以调用 setSuggestedInvocationPhrase”,当我从调试器运行它时它会显示。但是,如果我独立启动应用程序,我会得到“如果你调用它,setSuggestedInvocationPhrase 将会崩溃”。反而。
有没有其他人见过这样的事情?如果是这样,它是否在您在硬件上升级到 Xcode 11.4 和/或 iOS 13.4 后开始发生?我现在已经能够在 iPod Touch、iPhone 11 Pro Max 和 iPhone 8 的模拟器中重现这一点。
目前我正在通过respondsToSelector
在设置短语之前明确检查来解决这个问题,但这不是一个很好的长期解决方案。
ios13 - 在 iOS/iPadOS 13 上手动保存场景 NSUserActivity
我已经使用 实现了 iOS/iPadOS 13 状态恢复NSUserActivity
,主要是因为我的应用程序支持多个场景。
问题是,当我运行具有两个并排场景的模拟器并通过重建活动强制重新启动应用程序时,不会保存活动,并且重新启动时 UI 没有正确恢复。
另一方面,如果我首先返回 iPad 主屏幕,然后强制重新启动应用程序,则活动会正确恢复。
这是否意味着我的应用程序崩溃会阻止保存这些活动,从而导致重新启动时出现不一致的 UI 状态?
我怎么能定期“强制”储蓄活动(被stateRestorationActivity(for scene:)
调用)?
swift - 如何从您的 iOS 应用程序中删除 Siri 快捷方式意图?
使用iOS13.6.1、Swift5.2.4、XCode11.6、
按照Apple 的文档,我尝试从我的应用程序中删除特定的 Siri 快捷方式。
下面的代码首先展示了我是如何创建 Siri 快捷方式的。
下面的代码显示了我尝试从我的应用程序中再次删除相同的 Siri 快捷方式。
不幸的是,Siri 快捷方式并未从我的应用程序中删除。
知道如何永久删除它吗?
在这里我尝试删除相同的 Siri 快捷方式(但它不起作用 - 为什么?):
ios - 从 Siri 启动应用程序会导致“NSUserActivity 附加了交互但未处理”
我可以从 Siri 成功启动我的应用程序,但我在调试器中收到了 NSUserActivity 消息。我不记得在以前的版本中看到过该消息,但也许我没有注意。我错过了什么?有什么我应该从堆栈中弹出的东西吗?设置一些标志?
(我只能在设备上启动应用程序,而不是在模拟器中,但这是另一天的问题。Siri 告诉我出了点问题,然后再试一次。)
swift - INInteraction.delete 在 iOS13.7 中不起作用
使用iOS13.7、Swift5.2.4、XCode11.7、
我尝试在我的 iOS 应用程序中删除现有的 INInteraction。
INShortcut 创建如下:
之后,ActivityPersistentIdentifier
在手头,我尝试删除INInteraction。
我尝试了三种不同的方法(请参阅下面的删除方法) - 但它们都不起作用。
还有什么问题 - 为什么我的 Siri Shortcut INInteraction 没有被以下代码删除?
ios - Siri Shortcut 的 continueUserActivity 中的 userInfo 为空
我已经按照这个优秀的教程来实现从我的应用程序捐赠 Siri 快捷方式:
https://www.raywenderlich.com/6462-siri-shortcuts-tutorial-in-ios-12
但我无法在我NSUserActivity
的userInfo
字典中收到任何自定义数据集。
使用教程中的示例应用程序,我添加了:
to Article.newArticleShortcut()
, 但是userActivity.userInfo
是AppDelegate
's中的一个空字典continueUserActivity
。
我尝试了这里提到的建议(它们解决了与 Handoff 相同的问题),但它们没有帮助: https ://developer.apple.com/forums/thread/9690
有没有人能让这个工作?我不确定我还缺少什么。