- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图让我的 NSUserActivity 被 iOS 中 Spotlight 中的私有(private)索引索引。我已按照 Apple's Index Activities and Navigation Points 中的所有步骤进行操作指南,但我的事件似乎根本没有被聚光灯索引。
指南说:
To guarantee that the activity and its metadata get indexed, you must hold a strong reference to the activity until it gets added to the index. There are two ways to do this: The first way is to assign the activity to a property in the controller object that creates the activity. The second way is to use the userActivity property of the UIResponder object.
我选择了第一个选项(在我的 View Controller 中创建一个属性来保存 NSUserActivity)。
var lastSearchedUserActivity: NSUserActivity?
这个想法是,当用户搜索某物时,他最后的查询会在设备上编入索引。我有以下方法准备用户事件并(假设)对其进行索引:
func prepareLastSearchedUserActivity(tags: [String], server: Server) {
if Settings.applicationIndexedUserActivitiesAsShortcutTypes.contains(.LastSearched) {
print("Get ready to index. and tags \(tags.reduce("") { "\($0) \($1)" })")
let activity = NSUserActivity(activityType: ShortcutType.LastSearched.rawValue)
activity.title = server.serverName
activity.userInfo = ["tags": tags, "server name": server.serverName]
let attributeSet = CSSearchableItemAttributeSet()
attributeSet.contentDescription = tags.reduce("") { "\($0) \($1)" }
attributeSet.relatedUniqueIdentifier = ShortcutType.LastSearched.rawValue
activity.contentAttributeSet = attributeSet
activity.keywords = Set(tags)
activity.eligibleForSearch = true
activity.eligibleForHandoff = false
activity.becomeCurrent()
self.lastSearchedUserActivity = activity
//self.lastSearchedUserActivity?.becomeCurrent()
}
}
调用此方法没有问题,但事件不可搜索:我尝试使用分配给它的 title
和 keywords
在 Spotlight 中进行搜索。该事件从未出现。
我尝试过很多解决方案,包括:
在创建事件后直接移动 eligibleForSearch
调用。 Apple 的指南没有直接说明这一点,但提供的链接中的代码片段似乎暗示将此行设置为 true
应该会自动将事件添加到索引中。
Apple 并没有说应该调用 becomeCurrent()
,而是会为您调用它(如何调用?不知道)。不管你怎么看,我试着自己调用它。在将它分配给我的属性(property)后,我也尝试调用它。没有骰子。 Apple 确实说过,当在 eligibleForSearch
为 true
的事件上调用 becomeCurrent()
时,它将被添加到索引中。
我什至直接使用 View Controller 的 userActivity
属性来创建和配置事件。因为我正在使用提供的属性,所以它不应该提前解除分配。
据我所知,我正在做 Apple 在他们的指南中所做的一切。我完全迷路了。
我正在 iPhone 6S+ 上进行测试,因此可以使用 Spotlight 索引。控制台也不会打印与 Spotlight 相关的任何内容。
我只是将事件的委托(delegate)设置为 self
并实现了 userActivityWillSave
方法。
根据NSUserActivityDelegate
documentation , 关于 userActivityWillSave:
Notifies the delegate that the user activity will be saved to be continued or persisted.
所以调用了这个委托(delegate)方法,但是找不到索引项。这是更新后的代码:
func prepareLastSearchedUserActivity(tags: [String], server: Server) {
if Settings.applicationIndexedUserActivitiesAsShortcutTypes.contains(.LastSearched) {
print("Get ready to index. and tags \(tags.reduce("") { "\($0) \($1)" })")
let activity = NSUserActivity(activityType: ShortcutType.LastSearched.rawValue)
activity.title = server.serverName
activity.userInfo = ["tags": tags, "server name": server.serverName]
activity.delegate = self
let attributeSet = CSSearchableItemAttributeSet()
attributeSet.contentDescription = tags.reduce("") { "\($0) \($1)" }
attributeSet.relatedUniqueIdentifier = ShortcutType.LastSearched.rawValue
activity.contentAttributeSet = attributeSet
activity.keywords = Set(tags)
activity.eligibleForSearch = true
activity.eligibleForHandoff = false
self.lastSearchedUserActivity = activity
activity.becomeCurrent()
//self.lastSearchedUserActivity?.becomeCurrent()
}
}
func userActivityWillSave(userActivity: NSUserActivity) {
print("Yep it will save")
}
最佳答案
事实证明,在属性集中设置 relatedUniqueIdentifier
会导致 userInfo
字典被丢弃。
我把这一行注释掉了:
attributeSet.relatedUniqueIdentifier = ShortcutType.LastSearched.rawValue
它现在按预期工作。尽管我需要找到另一种方法来从索引中删除我的用户事件。
如果您必须为您的事件使用唯一标识符,那么您需要先使用 Core Spotlight 对其进行索引,然后再对 NSUserActivity
本身进行索引。如果您尝试使用 relatedUniqueIdentifier
而不是首先在 Spotlight 中使用它,则 NSUserActivity
将不会被索引。这就是我遇到的问题。
来自relatedUniqueIdentifier
property documentation in the CSSearchableItemAttributeSet
Class Reference :
If you’re using both NSUserActivity and Core Spotlight APIs to index the same item, set this property in the activity to specify the unique identifier of the Core Spotlight item to which the activity is related, and to avoid displaying duplicate results in Spotlight.
If the unique identifier to which the activity is related hasn’t already been indexed with Core Spotlight, the activity won’t be indexed.
关于ios - NSUserActivity 未被 Spotlight 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108977/
是否可以扩展 Spotlight 的搜索功能以支持其他命令? 例如,是否可以定义自定义 Web 搜索别名,这意味着我可以输入 yt,它会提供来自 youtube 的结果。 或者,如果我可以输入 sl
我想修改应用程序中文件的 Spotlight 元数据属性(即不在 Spotlight 导入器中),但我找不到任何 API 可以执行此操作。是否可以?指向相关文档的指针将是理想的选择。 如果它有帮助,这
我刚刚在 Ubuntu 16.04 下安装了 SikuliX(sikulixapi-2.0.4.jar) 和 Eclipse Oxygen。测试程序如下: import org.sikuli.scri
我正在使用 Spotlight API 在我的应用程序中提供搜索。我需要知道搜索字符串在文件中出现的次数,以便我可以实现排序描述符并对结果进行排序。有什么方法可以做到这一点而不必打开每个文件?其他库(
这就是我正在尝试做的事情: 我有一张图片。 我想在图像中获取一个圆形区域,并使其正常显示。 图像的其余部分应该显得更暗。 这样,圆形区域就像“突出显示”一样。 我非常感谢有关如何在 Python 中执
我对使用 DBpedia Spotlight 感兴趣。但是,我们需要为两个参数插入一个值信心 和 支持 .这两个参数的真正含义是什么? 我想确定文本中重要的、突出的 n-gram。在那种情况下,什么是
我想要两个光源:一个定向光源和一个聚光灯。我似乎无法理解我做错了什么——可能不了解着色器是如何工作的!我得到第一盏灯很好,但没有迹象表明第二盏灯(又名聚光灯)的效果。这是我想出的片段着色器: vary
此 Mac OS Spotlight 插件查询 Google 并在 Spotlight 中显示搜索结果: http://www.apple.com/downloads/macosx/spotlight
搜索一些关键字后,我需要在聚光灯搜索中显示我的应用程序。该关键词之一是“预订”。使用 CoreSpotlight,我设法让它出现在“应用程序框”本身上,但不在结果中的“应用程序”框中。 正如您所看到的
原始搜索运行良好,但查询不会注意到对不可见项目的任何更改。 可以再次运行查询,它将找到更新。 查询非零,并且尚未取消订阅聚光灯通知。 这是错误还是预期行为? 我已经在几个不同的项目中对此进行了多次测试
我希望创建一个可以放在 Spotlight 旁边的应用程序。 像 Dropbox、Mint、Alfred 这样的应用程序驻留在其中,并在操作系统的生命周期中一直存在。 我应该从哪里开始? 提前致谢,R
我正在使用 Spotlight API(Carbon 和 Cocoa 版本),似乎每隔一段时间就会出现同样的问题:查询从不运行,并且从不运行触发任何通知。不过,我想强调的是,大多数时候它确实运行,所以
我有一个需要身份验证的应用程序。在用户验证之前,菜单栏中仅存在菜单项的子集。用户成功通过身份验证后,我将应用程序的主菜单替换为 [NSApp setMainMenu:aMainMenu]; 不幸的是,
我为漫画文件创建了一个聚光灯导入器。属性已成功导入并可搜索。剩下的一件事是让属性显示在文件的获取信息窗口中。 看起来这应该是编辑 schema.xml 文件的简单问题,因此属性嵌套在 displaya
有办法实现这一点吗? 原因是我试图在添加/删除不可见文件和文件夹时强制聚光灯接收自动更新。我认为这种行为是不索引元数据的副作用(但我可能是错的)。我从这个SO question 得出这个结论. 解决方
我在应用程序中使用 Spotlight API (NSSMetadataQuery)。如果用户尝试对未编入索引的卷执行 Spotlight 查询,我想向他们显示一条有用的注释。 我可以通过运行“mdu
我想执行 Spotlight 查询以查找本地硬盘驱动器上的 Aperture 资料库。一个非常简单的方法是使用 kMDItemKind 但它的值取决于当前的用户语言: kMDItemKind =
不幸的是,我在网上找不到有关此主题的任何最新信息。类似于这里提出的问题: OS X Yosemite Spotlight extensions ,现在可以在 macOS Sierra 上扩展 Sp
我的iPad 2具有iOS 9.3.2,但Core Spotlight仍然无法正常工作。 想知道是否受支持吗? 最佳答案 按照Apple documentation: 注意 尽管iOS 9及更高版本提
我构建了 QAS(问答系统)并使用 DBpedia 作为知识库,所以我需要在我的问题中找到资源,例如( Algolia 、佛罗里达、巴拉克奥巴马..),当我使用“dbpedia-spotlight 工
我是一名优秀的程序员,十分优秀!