Listen

Description

http://nshipster.cn/mklocalsearch/

MKLocal​Search

Mattt Thompson撰写、 April Peng翻译、 发布于2013年4月29日
是的,我们知道的:人们对 Apple 的地图很无所适从。

本应该是 iOS 6 至高无上的新特性,却由于其尴尬的不准确定位以及移除了公共交通信息让官方出来为之道歉。

沉浸在这所有的沸沸嚷嚷中,你可能完全没有注意到在 iOS 6.1 的 MapKit 里新增加的一个小部件:MKLocalSearch。

MKLocalSearch 允许开发者得到一个地理区域内附近的兴趣点。

但在你急于去使用 MKLocalSearch 之前,你必须了解一些它的朋友的事情。你看,MKLocalSearch 是有区别于 MKLocalSearchRequest 和 MKLocalSearchResponse 的功能的:

SwiftObjective-C
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = "Restaurants"
request.region = mapView.region

let search = MKLocalSearch(request: request)
search.startWithCompletionHandler { (response, error) in
for item in response.mapItems {
// ...
}
}
像一个 “动物标本剥制师” 一样,MKLocalSearchRequest 需要一个 naturalLanguageQuery 和一个可选的边界地域 region 来约束结果。在实践中,region 通常从一个 MKMapView 传进来。

MKLocalSearchResponse 在 MKLocalSearch -startWithCompletionHandler: 的同名 block handler 中被返回,并且返回一个 MKMapItem 对象的数组。每个 MKMapItem 通过 placemark 属性包含了诸如 name,phoneNumber,url 和地址这样的信息。

如果你保持一个 MKLocalSearch 对象的引用,你可以选择性的像 -viewWillDisappear: 或之类的一样来 -cancel 请求。

重点在哪儿?

MKLocalSearch 是一种相对直接的 API(尽管也许更糟的是它仅是一个简单的单类接口)......所以有什么大不了的?

API 的限制。 或者说,它们的缺陷。让我来解释一下:

或许关于 iOS 6 中 MapKit 最反直觉的事情是 它仍然被广泛的使用。别去管 “苹果地图门” 的闹剧,即使从 Google 和 MapBox 引入了非常棒的 iOS 地图 SDK,开发者们仍在使用 MapKit.

有部分原因可能是审美问题,但更多的则是因为主场优势。由于 MapKit 与 UIKit 紧密联系,它可以更容易,更广泛地由第三方开发者定制。

这把我们带回到了 API 调用的限制。当用另一种地图 SDK 或地理空间 Web 服务开发的时候,许可条款几乎必然比苹果公司免费提供的更为有限。免费是一个艰难的问题,而且更没得选的是区域性加载或调用 API 的时候不用担心越过 API 的限制。

我们还能做什么呢?

通过引入 MKLocalSearch,在类似的场景中,苹果提供了越来越多的原生 API。扩展的地理空间搜索?或者是 iTunes 流媒体的第一方 API?

毕竟,人们可以敢于梦想...

MKLocalSearch 提供了一种简单的方法来找到当地兴趣点。由于其无争议的 web 服务集成,以及与 MapKit 的紧密集成,任何基于位置的应用程序都该好好地利用它。

作者
Mattt ThompsonMattt Thompson
Mattt Thompson (@mattt) is the creator & maintainer of AFNetworking and other popular open-source projects, including Postgres.app, ASCIIwwdc and Nomad.

翻译者
April Peng
做 iOS / Mac / Web 开发的大白羊妹子~

下一篇文章
NSCoding / NSKeyed​Archiver
在构建应用程序时,一个重要的架构决策问题是在每次启动之间如何持久化数据。问题是如何精准的重现最后一次关闭应用前的状态;如何描述对象图以使下次完美地重新构建。

相关文章
UILocalizedIndexedCollation
CFBag
NSSortDescriptor
NSExpression
除非另有声明、本网站采用知识共享「署名-非商业性使用 3.0 中国大陆」许可协议授权。

本站文章由 Croath Liu 、 、 Delisa Mason 、 Jack Flintermann 、 Mattt Thompson 、 、 Mike Lazer-Walker 、 Natasha Murashev 和 Nate Cook 撰写、 Andrew Yang 、 April Peng 、 Bob Liu 、 Candyan 、 Chester Liu 、 Croath Liu 、 David Liu 、 GWesley 、 Henry Lee 、 JJ Mao 、 Lin Xiangyu 、 Ricky Tan 、 Sheldon Huang 、 Tiny Tian 、 Tony Li 、 Yifan Xiao 、 Yu Jin 和 Zihan Xu 翻译。