【问题标题】:NSUserActivity not searchable by Keywords (only by Title) in iOS9?NSUserActivity 在 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 上的属性。

标签: ios objective-c ios9 corespotlight


【解决方案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
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2020-02-07
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多