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 是 - 星巴克
NSLog(@"item's placemark.name is - %@", item.placemark.name)
项目的 placemark.name 为 - 无
mapItem1 具有适当的值。 mapItem1.placemark.name 是@"Startbucks"。
当我像上面这样实现时,item.placemark.name 为零。但 placemark1.name 是@"Sartbucks"。
当我用另一个MKPlacemark制作MKMapItem时,它也在这个MKMapItem中放置了 mark.name 是零。
我不知道为什么这些结果回来了。
我认为必须返回与原始地标相同的值。
我注意到如果你分配MapItem的名称,地标会显示名称。
extension MKPlacemark {
var toMapItem: MKMapItem {
let item = MKMapItem(placemark: self)
item.name = name
return item
}
}
我假设mapItem1是MKMapItem的类型?如果这是真的,则不需要初始化新的 MKPlacemark 对象 (*placemark1),也不需要将 placemark1 存储在新的 MKMapItem 对象 (*item) 中。
由于您在代码中调用 mapItem1 上的地标 (mapItem1.placemark),我认为我假设它是 MKMapItem 类型是对的。
总而言之,您根本不需要这些代码行:
MKPlacemark *placemark1 = [[MKPlacemark alloc] initWithPlacemark:mapItem1.placemark];
MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark1];
您的 MKMapItem *mapItem1 将按原样工作。这有意义吗?你在这里重新发明轮子。只需在您需要使用它的地方使用mapItem1.placemark即可。我一直在做一个使用 mapkit 的项目,所以如果你有任何问题,我很乐意回答。