叶祖新,实战iOS 9:开发者有必要把握的三种查找API,则

CSDN移动将继续为您优选移动开发的精华内容,一同讨论移动开发的技能热点话题,包括移动运用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。假如您想投稿民国投机者、参加内容翻译作业,或寻求近匠报导,请发送邮件至tangxy#csdn.net(请把#改成@)。

iOS9 Day-by-Day是作者Chris Grant新开的一个系列博客,覆盖了iOS开发者小白杨有必要知道的关于iOS 9的新技能与API,而且还进行了实际操作演练,每篇文章中相关的代码Chris都会将其托管到弧长公式GitHub。

在榜首篇文章中,Chr煎饼侠is介绍了iOS 9的三种查找API,分别为:

NSUserActivity,索引用户活动以及App的状况。iOS 9新增的CoreSpotlight.framework供给了增、删、改、查等查找API,能够索引App的内容。Web Markup,Web内容可被查找。

译文如下:

在苹果发布iOS 9之前,你只能在Spotlight中输入称号来寻觅App,而跟着苹果发布了一套全新的iOS 9 Search APIs之后,开发者不光能够自由挑选App的部分内容编入索引,还能对Spotlight上的查找成果以及点击不同成果显现的内容进行设置。

三大APINSUserActivity

NSUserActivity是iOS 8专为Handoff推出的API,iOS 9之后得到了提高。现在用户只需供给元数据(metadata)就能查找不同的activity(活动)了。换言之,Spotlight能够将activity编入索引,而NSUserActivity就比方网页浏览器的前史仓库(history stack),运用户能在Spotlig叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则ht上搜到最近的活动。 3d动漫

Web Markup

Web Markup在网页上显现App的内容并编入Spotlight索引,如此一来即使没有装置某个App,苹果的索引器也能在网页上查找特别的符号(markup),在Safari或S英国地图potlight上显现查找成果。

显现未安叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则装App的查找成果是一大亮点,有望为开发者带来更多潜在用户。发布在查找API上的App深链接则贮存在苹果的cloud index中。更多概况,请参阅苹果的“Web Ma叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则rkup运用指南(Use Web Markup to Make App Conten福娃t Searchable)”。

CoreSpotlight

NSUserActivity协助贮存用户前史,而全新的Cor一路顺风e Spotlight则能将App中的任何内容编入索引,本质是在用户设备上供给根底的Core Spotlight索引途径,满意用户别的一个需求。

实战运用Core Spotlight API

NSUserActivity和Web Markup比较简略,而Core Spotlight就有点杂乱了。为协助读者更好地了解CoreSpotlight的效果,咱们创立了一个简易的老友清单App,点击不同的老友称号,就会显现对应的相片。读者能够在GitHub上找到代码,跟咱们一同实践一下吧。

App中简略列出了一个故事板,FriendTableViewController显现老友的姓名,FriendViewController则显现老友的详细信息。

老友信息都贮存在Datasource类的模型里,其间包括将相关信息存入CoreSpotlight索引的逻辑。

先重写Datasource类中的init()办法,在Datasourc叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则e高玉伦被捕获类里创立和贮存一行列Person目标。其实从数据库或服务器上加载真实数僵小鱼据也行,但便利了解,咱们直接创立一些虚拟数据。

override init () { let becky = Person() becky.name = "Becky" becky.id = "1" becky.image = UIImage(named: "becky")! ... people = [becky, ben, jane, pete, ray, tom] }

数据在一行列people中贮存好之后,就能够用Datasource了!

现在数据预备好了,FriendTableViewController能够创立一个Datasource的实例来呼应表格视图显现贮存格的恳求。

let datasource = Datasource()

cellForRowAtIndexPath显现在贮存格里的内容能够很简略,比方:

let person = datasource.people[indexPath.row] cell?.textLabel?.text = person.name

将老友信息存入CoreSpotlight

咱们能够用新的iOS9 API将老友信息存入CoreSpotlight。在Datasource 类里现已界说了savePeop集思录leToIndex的功用,视图加载好后FriendTableViewController 就会调用该功用。

咱们在行列里循环拜访不同老友的信息,为每个人创立一个CSSearchableItem,然后贮存到名为searchableItems的暂存阵列里。

let attributeSet = CSSearchableItemAttributeSet(itemContentType: "image叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则" as String) attributeSet.title = person.name attributeSet.contentDeion = "This is an entry all about the interesting person called (person.name)" attributeSet.thumbnailData = UIImagePNGRepresentation(person.image) let item = CSSebeargayarchableItem(uniqueIdentifier: person.id, domainIdentifier: "com.ios9daybyday.S三体在线阅览earchAPIs.people", attributeSet: attributeSet) searchableItems.append(item)

最终一步是在体系默许的CSSearchableIndex上调用indexSearchableItems ,效果是将信息一项一项存入CoreSpotlight,以便用户查找,显现查找成果。

CSSearchableIndex.defaultSearchableIn软装规划公司dex().indexSearchableItems(searchableItems, completionHandler: { error -> V李敖oid in if error != nil { print(er北斗神拳大庆新玛特砍人ror?.localizedDeion) } })

功德圆满!现在运转App时就会贮存数据了。在Spotlight中能够搜到老友们的信息啦!

用户挑选

Spotlight能显现查找成果了,那么点击不同老友会怎样呢?——其实仅仅翻开App的主屏幕罢了。要想直接显现对应的老友信息,还需要做更多。咱们经过AppDelegate的continueUserActivity UIApplicationDelegate办法增加这个功用。

以下是该办法完好的履行进程:

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.popToRootViewControllerAnimated(false) let friendTableViewController = navigationController.viewControllers.first as! FriendTableViewController friendTableViewController.showFriend(friendID) return true }

好了,之前用indexSearchableItems功用存入CoreSportlight索引的信息显现在userActivity.userInfo目录里了。咱们所关怀的老友ID一项一项经过kCSSearchableItemActivityIdentifier贮存在索引里了。

从userInfo目录提取信息时,能够找到App的导航控制器,回归到root(因为没有动画提示,用户或许留意不到),然后在friendTableViewControll叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则er上调用showFriend 功用。详细细节不多说,这个进程实际上是在数据源里找到老友的ID信息,然后给导航控制器仓库推送新的视图控制器就能够了!现在点击Spotlight的老友信息,就会看到如下内容:

看到了吧?App屏幕左上方角落里有“Back to Search(回来查找)”选项,直接回来到显现老友称号的查找屏。也能够用“back(回来)”键完结这一步。

Demo总结咱们刚刚了解了怎么整合App数据跟CoreSpotlight索引,进程很简略——简化了翻开App的操作,查找特定内容也更便利了。

此文没有提及怎么从索引中删去数据。为坚持更新app所用的索引,CoreSpotlight的删去功用必不可少,这方面能够看看deleteSearchableItemsWithIdentifiers,deleteSearchableItemsWithDomainIdentifiers和deleteAllSearchableItemsWithCompletionHandler三个功用。

做iOS生态体系的“良民”对开发者而言,在Spotlight和Safari上的曝光率自然是越高越好,但信息众多或许导致不良后果,所以规劝各位三思。在iOS生态体系中尽力做“良民”能在用户心里留下好形象,比特币是什么别的也不会给苹果公司留下凭据,他们在相关数据上投下重金,因为数据相关性收到紧密监控,若呈现数据众多的状况,就会被移到查找成果的底部。

更多信息若想了解iOS9查找API的更多信息,引荐观看WWDC 709会议对查找API的介绍(Introducing Search APIs),另快穿之娇花外NSUserActivity Class Reference以及documentation for CoreSpotlight也是很不错的参考资料。若想亲身体会上述的小试验,能够在GitHub上找到源码。

(翻译/张新慧 审校/唐小引)

文章来历: shinobicontrols

榜首时间掌握最叶祖新,实战iOS 9:开发者有必要掌握的三种查找API,则新移动开发相关信息和技能,请重视mobilehub大众微信号(ID: mobilehub)。

本文为CSDN编译收拾,未经答应不得转载,如需转载请联络market#csdn.net(#换成@)