从MKPlacemark创建MKMapItem时,MKMapitem的Placemark.name为nil

时间:2015-06-15 12:50:07

标签: ios mapkit mkmapitem mkplacemark

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' s placemark.name是 - 星巴克

NSLog(@"item's placemark.name is - %@", item.placemark.name) 
  

item'的placemark.name是 - nil

mapItem1具有正确的值。 mapItem1.placemark.name是@" Startbucks"。

当我按上述方式实现时,item.placemark.name为nil。 但是placemark1.name是@" Sartbucks"。

当我用另一个MKPlacemark制作MKMapItem时,它也将此MKMapItem中的mark.name设为nil。

我不知道为什么这些结果会回来。

我认为必须返回原始地标的相同值。

2 个答案:

答案 0 :(得分:3)

我注意到如果你指定了MapItem的名字,那么地标就会显示名称。

extension MKPlacemark {
    var toMapItem: MKMapItem {
        let item = MKMapItem(placemark: self)
        item.name = name
        return item
    }
}

答案 1 :(得分:0)

我假设 mapItem1 的类型为 MKMapItem ?如果是这样,您不需要初始化新的MKPlacemark对象( * placemark1 ),也不需要将 placemark1 存储在新的MKMapItem对象中( *项)。

由于您在代码中的mapItem1上调用了地标(mapItem1.placemark),我认为我认为它是MKMapItem类型是正确的。

总结一下,根本不需要这些代码:

MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithPlacemark:mapItem1.placemark];

MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark1];

您的MKMapItem * mapItem1将按原样运行。那有意义吗?你在这里重新发明轮子。只需使用mapItem1.placemark就可以使用它。我一直在研究一个使用mapkit的项目,所以如果你有任何问题,我很乐意回答它们。