核心Spotlight索引-activityType错误

时间:2018-07-07 22:32:04

标签: ios swift spotlight nsuseractivity

我有一个应用,我想添加对Spotlight的支持。

我已经使用NSUserActivity实现了它,并且效果很好。不利之处在于,用户需要“打开”文档才能使其显示在聚光灯下。

因此,除了使用NSUserActivity之外,我还想使用Core Spotlight在用户启动应用或导入新内容时为所有应用内容编制索引。

这是一个简单的操作:

func indexNewDocuments() {
    let documentsToBeIndexed = ...
    CSSearchableIndex.default().indexSearchableItems(documentsToBeIndexed) { (error) -> Void in
        if error != nil {
            print(error!.localizedDescription)
        } else {
            // Indexed
        }
    }
}

documentsToBeIndexed数组是在我的文档对象上使用几个计算出的var生成的:

var attributeSet: CSSearchableItemAttributeSet {
        let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeArchive as String)
        attributeSet.title = title
        attributeSet.contentDescription = "document description"
        return attributeSet
    }

    var searchableItem: CSSearchableItem {
        return CSSearchableItem(uniqueIdentifier: id,
                                domainIdentifier: "com.myApp.document",
                                attributeSet: attributeSet)
    }

一切正常,我可以看到在Spotlight中正确索引了所有数据库(在用户打开文档之前)。

问题

问题是当用户从Spotlight中选择文档后,我尝试导航。

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        guard userActivity.activityType == "com.myApp.document" else {
                return false
        }
        //Navigation
        return true
    }

这仅适用于NSUserActivty(因此,当用户先前打开文档时)。 通过CoreSpotlight编制索引无法正常工作,原因是:

po userActivity.activityType
"com.apple.corespotlightitem"

po userActivity.userInfo
▿ Optional<Dictionary<AnyHashable, Any>>
  ▿ some : 1 element
    ▿ 0 : 2 elements
      ▿ key : AnyHashable("kCSSearchableItemActivityIdentifier")
        - value : "kCSSearchableItemActivityIdentifier"
      - value : e7ed763e42ecf3312bb7fe931f28e694

由于某种原因,使用Core Spotlight编制索引时,我没有收到正确的userActivity。

我想念什么吗?

PS:我还将密钥添加到了信息列表NSUserActivityTypes

0 个答案:

没有答案