The*_*dge 1 google-maps objective-c nsdictionary ios
在我的应用程序中,我创建了一个名为StoreInfo的对象数组.地图上的标记是使用StoreInfo对象的字段生成的.后来我想使用存储在StoreInfo字段中的其他数据生成一个信息窗口.因此我需要在标记和信息对象之间创建一个字典.
storeMarkerMap = [[NSDictionary alloc] init];
for(StoreInfo *info in storesArray){
CLLocationCoordinate2D pos = CLLocationCoordinate2DMake(info.lat,info.lng);
GMSMarker *marker = [GMSMarker markerWithPosition:pos];
marker.title = info.name;
marker.snippet = info.type;
marker.icon =[self iconSelector: info];
marker.map = mapView_;
[storeMarkerMap setObject:info forKey:marker];
}
Run Code Online (Sandbox Code Playgroud)
...
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
CustomInfoWindow *infowindow = [[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];
StoreInfo *info = [storeMarkerMap objectForKey:marker];
infowindow.title.text = info.name;
infowindow.description.text = info.address;
infowindow.phone.text=info.phone;
return infowindow;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为标记对象不遵循以下要求:
Keys必须实现hash和isEqual
最简单:使用商店作为标记的userData :)
==>没有必要乱用一个额外的字典(恕我直言最干净)
所以:
for(StoreInfo *info in storesArray){
CLLocationCoordinate2D pos = CLLocationCoordinate2DMake(info.lat,info.lng);
GMSMarker *marker = [GMSMarker markerWithPosition:pos];
marker.userData = @{@"store":info};
...
}
Run Code Online (Sandbox Code Playgroud)
...
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
StoreInfo *info = marker.userData[@"store"];
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3794 次 |
| 最近记录: |