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

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是 - 星巴克

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中的placemark.name也是nil。

我不知道为什么会出现这些结果。

我认为应该返回原始placemark的相同值。

2个回答

3
我注意到如果你给MapItem分配名称,那么地标会显示名称。
extension MKPlacemark {
    var toMapItem: MKMapItem {
        let item = MKMapItem(placemark: self)
        item.name = name
        return item
    }
}

0

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

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

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接