从 MKPlacemark 创建 MKMapItem 时,MKMapitem 的 Placemark.name 为 nil
Posted
技术标签:
【中文标题】从 MKPlacemark 创建 MKMapItem 时,MKMapitem 的 Placemark.name 为 nil【英文标题】:MKMapitem's Placemark.name is nil when creating MKMapItem from MKPlacemark 【发布时间】:2015-06-15 12:50:07 【问题描述】:MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithPlacemark:mapItem1.placemark];
MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark1];
NSLog(@"placemark1.name is - %@", placemark1.name)
placemark1.name 是 - 星巴克
NSLog(@"mapItem1's placemark.name is - %@", mapItem1.placemark.name)
mapItem1 的 placemark.name 是 - Starbucks
NSLog(@"item's placemark.name is - %@", item.placemark.name)
item 的 placemark.name 是 - nil
mapItem1 具有正确的值。 mapItem1.placemark.name 是@"Startbucks"。
当我像上面那样实现时,item.placemark.name 为零。 但是 placemark1.name 是 @"Sartbucks"。
当我通过另一个 MKPlacemark 制作 MKMapItem 时,它也在这个 MKMapItem 中放置 mark.name 为 nil。
我不知道为什么返回了这些结果。
我认为必须返回与原始地标相同的值。
【问题讨论】:
【参考方案1】:我注意到,如果您指定 MapItem 的名称,地标会显示名称。
extension MKPlacemark
var toMapItem: MKMapItem
let item = MKMapItem(placemark: self)
item.name = name
return item
【讨论】:
【参考方案2】:我假设 mapItem1 属于 MKMapItem 类型?如果这是真的,您不需要初始化一个新的 MKPlacemark 对象(*placemark1),也不需要将 placemark1 存储在一个新的 MKMapItem 对象中(*项目)。
由于您在代码 (mapItem1.placemark) 中调用 mapItem1 上的地标,我认为假设它是 MKMapItem 类型是正确的。
总而言之,您根本不需要这些代码行:
MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithPlacemark:mapItem1.placemark];
MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark1];
您的 MKMapItem *mapItem1 将按原样工作。那有意义吗?你在这里重新发明***。只需在需要使用它的任何地方使用 mapItem1.placemark 即可。我一直在做一个使用 mapkit 的项目,所以如果您有任何问题,我很乐意回答。
【讨论】:
以上是关于从 MKPlacemark 创建 MKMapItem 时,MKMapitem 的 Placemark.name 为 nil的主要内容,如果未能解决你的问题,请参考以下文章