iOS 13 Beta下MKMapItem.pointOfInterestCategory返回nil问题排查
解决iOS 13 Beta中MKMapItem.pointOfInterestCategory为nil的问题
我帮你梳理了代码和可能的问题点,有几个调整方向可以尝试:
1. 明确指定搜索结果类型为POI
你的请求没有限制返回结果的类型,默认可能混合返回普通地址、兴趣点等多种条目,非POI类型的mapItem自然不会携带pointOfInterestCategory。建议在创建request后添加这行代码,确保只返回兴趣点类型结果:
request.resultTypes = .pointOfInterest
2. 检查所有搜索结果条目
搜索返回的结果里可能包含多个mapItem,比如第一个是普通地址条目,后面才是带POI类别的目标条目。你可以在循环里额外打印关键信息,确认你处理的是正确的POI条目:
for mapItem in response.mapItems { print("条目名称: \(mapItem.name ?? "未知")") if #available(iOS 13.0, *) { print("MapItem直接获取的POI类别: \(mapItem.pointOfInterestCategory ?? "nil")") print("从Placemark获取的POI类别: \(mapItem.placemark.pointOfInterestCategory ?? "nil")") } dump(mapItem) }
试试访问mapItem.placemark.pointOfInterestCategory,有时候底层placemark的字段会比mapItem的直接属性更早被填充。
3. 排查iOS 13 Beta版本的API兼容性问题
iOS 13的Beta版本本身可能存在API不稳定的情况,比如地图服务端还未完全支持返回pointOfInterestCategory字段,或者SDK的属性映射存在bug。如果条件允许,可以尝试升级到iOS 13正式版本,或者查看苹果开发者社区的已知问题,确认是否有其他开发者遇到类似情况。
4. 调整POI Filter的设置
虽然你用的是excluding: [.atm],可以尝试暂时移除这个filter,或者改为精准包含目标类别(比如.church)来测试:
if #available(iOS 13.0, *) { request.pointOfInterestFilter = MKPointOfInterestFilter(including: [.church]) }
这样既能精准过滤出你需要的POI类型,也能验证是否filter的设置影响了字段的返回。
内容的提问来源于stack exchange,提问作者Gerd Castan
相关产品推荐
相关产品推荐

