2016-01-07 44 views
1

我閱讀了一些教程,發現NSUserActivity爲用戶進行活動時的索引信息,Core Spotlight爲應用中的一組內容數據索引。使用NSUserActivity或核心聚光燈

使用NSUserActivity

var activity = NSUserActivity(activityType: "com.example.demo.searchapi") 
activity.title = contactEntity.name 
activity.userInfo = ["id": contactEntity.uid] 
activity.eligibleForSearch = true 
activity.keywords = NSSet(array: [contactEntity.name,contactEntity.phoneNumber, contactEntity.email]) as! Set 

activity.becomeCurrent() 

使用核心聚光燈

let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeContact as String) 
attributeSet.title = contactEntity.name 
attributeSet.relatedUniqueIdentifier = contactEntity.uid 

let searchableItem = CSSearchableItem(uniqueIdentifier: contactEntity.uid, domainIdentifier: "com.example.demo.searchapi", attributeSet: attributeSet) 

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { error in 
if let error = error { 
    print("Error indexing: \(error)") 
} else { 
    print("Indexed.") 
} 

但我不認爲有兩個解析結果之間的差異。如果用戶進行一項活動,我可以使用Core Spotlight,而不是NSUserActivity。它給了我相同的結果。

那麼,爲什麼蘋果必須提供兩個具有相同結果的差異解決方案?

+0

iOS 9中的NSUserActivity具有'contentAttributeSet',它的類型爲'CSSearchableItemAttributeSet' – onmyway133

+0

我知道它。但是CSSearchableItem也可以使用CSSearchableItemAttributeSet參數初始化。那麼爲什麼Apple提供兩個API(NSUserActivity和Core Spotlight)具有相同的結果。我沒有發現任何差異 – huync

+3

核心Spotlight不支持公共索引,而NSUserActivity會。 NSUserActivity可用於設備和公共索引。 – PGDev

回答

1

我現在將Core Spotlight和NSUserActivity加入到我的應用程序中,並且我已經瞭解了一些差異。

由於@PGDev在您的評論中聲明,NSUserActivity可以設置爲公開索引(在蘋果服務器上),這樣可以有助於在其他用戶的搜索結果中顯示。而核心聚光燈僅限於每個設備。

NSUserActivity適用於我的應用的最大好處是,更多的用戶執行相同的activity,比如說閱讀同一新聞故事,該索引變得越來越流行,並且可以產生有益的結果。 Apple - Enhance Your Search Results

  • 與用戶查看內容(當使用NSUserActivity其被捕獲的)頻率
  • 具有與內容(由接合比率來確定,這是基於該接合用戶的量次用戶數挖掘與您的應用程序和顯示在搜索結果中的應用程序相關的項目數)
  • 在您的網站的網址和結構化數據的可用量的普及項目