我写了一些代码,试图通过迭代枚举值一次注册多个 Siri 快捷方式
当我运行代码并打开设置应用程序时,它只显示最后注册的快捷方式。
我应该如何一次注册多个 Siri 快捷方式?
static func registerSiriShortcut(to responder: UIResponder) {
if #available(iOS 12.0, *) {
let cases = SiriShortcutType.allCases
for type in cases {
let activity = NSUserActivity(activityType: type.siriActivityType)
activity.title = type.siriShortcutTitle
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
responder.userActivity = activity
responder.userActivity?.becomeCurrent()
}
}
}
最佳答案
我觉得你的代码没问题。一般设置->Siri 只显示最近注册的快捷方式。如果您转到设置->Siri->所有快捷方式,您将在此处看到所有名称。
正如您在代码中提到的 activity.isEligibleForSearch = true 或者,从主屏幕向右滑动转到手机搜索并输入快捷方式,您应该也会看到快捷方式项目的弹出窗口。
编辑 1:我的代码证明:
Info.plist:你需要提到有多少 NSUserActivityTypes:
<Key>NSUserActivityTypes</key>
<array>
<string>com.rio.SiriShortcuts.makeGreen</string>
<string>com.rio.SiriShortcuts.makeRed</string>
</array>
枚举类:
enum SiriShortcutType {
case makeRed
case makeGreen
var siriActivityType: String {
switch self {
case .makeRed:
return "com.rio.SiriShortcuts.makeRed"
case .makeGreen:
return "com.rio.SiriShortcuts.makeGreen"
}
}
var siriShortcutTitle: String {
switch self {
case .makeRed:
return "Make View Red"
case .makeGreen:
return "Make View Green"
}
}
var color: String {
switch self {
case .makeRed:
return "red"
case .makeGreen:
return "green"
}
}
static let allCases:[SiriShortcutType] = [.makeRed, .makeGreen]
}
现在我在 VC 中的注册方法(通过按钮操作调用):
func registerSiriShortcut() {
if #available(iOS 12.0, *) {
let cases = SiriShortcutType.allCases
var suggestions: [INShortcut] = []
for type in cases {
let activity = NSUserActivity(activityType: type.siriActivityType)
activity.userInfo = ["color" : type.color]
activity.title = type.siriShortcutTitle
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.persistentIdentifier = NSUserActivityPersistentIdentifier(type.siriActivityType)
suggestions.append(INShortcut(userActivity: activity))
}
INVoiceShortcutCenter.shared.setShortcutSuggestions(suggestions)
}
}
编辑 1:INShortcut 支持多个 Siri 快捷方式:请参阅更新的 registerSiriShortcut()。
关于ios - 一次注册多个 Siri 快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53096110/
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下