Search와 관련된 3 APIs

  • NSUserActivity
  • Web Markup
  • CoreSpotlight => 이 중에서 Core Spotlight를 자세히 볼 것이다.

Core Spotlight API 사용하기

  • Core Spotlight에 엔트리 저장하기

1. iOS 9에서 사용 가능한 Search API 사용하여 Core Spotlight에 저장이 가능하다.
아래에서 보듯이, 각각의 CSSearchableItem을 만들고 searchableItems라는 임시 어레이에 저장하자.

let attributeSet = CSSearchableItemAttributeSet(itemContentType: "image" as String)
attributeSet.title = person.name
attributeSet.contentDescription = "This is an entry all about the interesting person called \(person.name)"
attributeSet.thumbnailData = UIImagePNGRepresentation(person.image)

let item = CSSearchableItem(uniqueIdentifier: person.id, domainIdentifier: "com.ios9daybyday.SearchAPIs.people", attributeSet: attributeSet)
searchableItems.append(item)

2. CSSearchableIndex에서 indexSearchableItems를 호출하자.
이것은 실제로 사용자들이 검색할 수 있고 그 결과를 볼 수 있도록 CoreSpotlight에 저장하는 것이다.

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems, completionHandler: 
{ error -> Void in
    if error != nil {
        print(error?.localizedDescription)
} })

3. 다음과 같이 검색 결과를 Core Spotlight에서 볼 수 있다.


  • 사용자에 대한 응답
    spotlight에서 검색 결과를 선택하면, AppDelegate의 continueUserActivity UIAppicationDelegate로 들어오게 된다. 이 곳에 로직을 추가하면 된다. 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {

    // Find the ID from the user info
    let friendID = userActivity.userInfo?["kCSSearchableItemActivityIdentifier"] as ! String

    // Find the root table view controller and make it show the friend with this ID
    let navigationController = (window?.rootViewController as! UINavigationController)
    navigationController.popToRootViewControllerAnimagted(false)
    let friendTableViewController = navigationController.viewController.first as! FriendTableViewController
    friendTableViewController.showFriend(friendID)

    return true

  }


더 많은 정보



소스코드 - https://github.com/shinobicontrols/iOS9-day-by-day/tree/master/01-Search-APIs
참고 - iOS 9 Day by Day - by shinobicontrols



+ Recent posts