NSUserActivity 在 iOS9 中不能按关键字(仅按标题)搜索?

Posted

技术标签:

【中文标题】NSUserActivity 在 iOS9 中不能按关键字(仅按标题)搜索?【英文标题】:NSUserActivity not searchable by Keywords (only by Title) in iOS9? 【发布时间】:2015-09-13 10:52:10 【问题描述】:

我在 ios 9 中创建了一个可搜索的 NSUserActivity,如下所示。

  userActivity = [[NSUserActivity alloc] initWithActivityType:@"com.example.app.conversation"];
    userActivity.title = @"Conversation with Fred Thompson";
    **userActivity.keywords = [NSSet setWithObjects:@"Holiday" @"Summer", nil];**
    userActivity.userInfo = @@"keyOne":@"valueOne", @"keyTwo":@"valueTwo";
    userActivity.eligibleForSearch = YES;
    userActivity.eligibleForPublicIndexing = NO;
    userActivity.eligibleForHandoff = NO;
    userActivity.contentAttributeSet = attributeSet;
    [userActivity becomeCurrent];

并且我在 info.plist 中注册了以下活动类型:

com.example.app.conversation

在 Spotlight 中,我可以搜索 TITLE 的任何单词并找到我的 UserActivity;但是,没有一个关键字可用于查找我的 UserActivity。

因此,搜索“Fred Thompson”将返回活动,因为这些词在标题中;但是搜索“Holiday Summer”将不会返回任何结果。 (注意:关键字对我来说适用于 CSSearchableItems)。是的,我也尝试使用晦涩的词来确保我的结果不会被其他更受欢迎的结果淹没。

但是,无论如何,我都无法通过提供的关键字找到我的 NSUSerActivity。我究竟做错了什么?

【问题讨论】:

NSUserActivity 结果不起作用,因为活动在索引之前就被释放了。要使其正常工作,请保留该属性。 self.userActivity = activity // 使 userActivity 成为当前 ViewCrtl 的活动。此外,请确保您已将 CoreSpotlight 和 MobileCoreServices 框架添加到您的项目中。 Spotlight 上有一个很好的教程:code.tutsplus.com/tutorials/… 您可以尝试使用CSSearchableItemAttributeSet 实例设置用户活动的contentAttributeSet 属性(它还有另一个keywords 属性。请注意,您需要导入CoreSpotlight 才能看到contentAttributeSetNSUserActivity 上的属性。 【参考方案1】:

证明@hagi 的答案是正确的。在 iOS 9.3.1 中测试了以下代码:

extension YourObject 
static let domainIdentifier = "com.example"

var userActivityUserInfo: [NSObject: AnyObject] 
    return ["hashID": "(hashID!)"]


var userActivity: NSUserActivity 
    let activity = NSUserActivity(activityType: YourObject.domainIdentifier)
    activity.title = title
    activity.userInfo = userActivityUserInfo
    activity.contentAttributeSet = attributeSet
    return activity


var attributeSet: CSSearchableItemAttributeSet 
    let attributeSet = CSSearchableItemAttributeSet(
        itemContentType: kUTTypeContact as String)
    attributeSet.title = title
    attributeSet.contentDescription = "Blah"

    if let data = thunbnailImageData 
        attributeSet.thumbnailData = data
    
    attributeSet.supportsPhoneCall = false
    attributeSet.keywords = tags!

    return attributeSet



【讨论】:

以上是关于NSUserActivity 在 iOS9 中不能按关键字(仅按标题)搜索?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSUserActivity 时如何将值返回给 Siri Shortcut?

使用 NSUserActivity 在锁定屏幕上看不到我的 siri 快捷方式

Swift 场景 userActivity NSUserActivity 传你 viewController

Siri ShortCuts - NSUserActivity,不显示给定的缩略图

iOS9 HTTP 不能正常使用的解决办法

ios9.3无法点开网站链接 ios9.3不能打开Safari内链接怎么解决