Google Maps for ios,在Objective C中创建标记的NSDictionary

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

Dai*_*jan 5

最简单:使用商店作为标记的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)