You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:08:20