3
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) 

项目的 placemark.name 为 - nil

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

当我像上面那样实现时, item.placemark.name 为零。但是 placemark1.name 是 @"Sartbucks"。

当我用另一个 MKPlacemark 制作 MKMapItem 时,它也会在这个 MKMapItem 中放置 mark.name 为 nil。

我不知道为什么这些结果返回了。

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

4

2 回答 2

3

我注意到如果您指定 MapItem 的名称,地标会显示名称。

extension MKPlacemark {
    var toMapItem: MKMapItem {
        let item = MKMapItem(placemark: self)
        item.name = name
        return item
    }
}
于 2017-11-13T13:50:01.470 回答
0

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

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

总而言之,您根本不需要这些代码行:

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

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

您的 MKMapItem *mapItem1 将按原样工作。那有意义吗?你在这里有点重新发明轮子。只需在需要使用它的任何地方使用 mapItem1.placemark 即可。我一直在做一个使用 mapkit 的项目,所以如果您有任何问题,我很乐意回答。

于 2015-08-15T06:03:16.970 回答