MapView:点击注释会给我错误的详细视图数据?

时间:2017-06-29 03:00:25

标签: ios objective-c

我使用NSDictionary填充MapView注释的数据。但是,当我点击我的MapView注释时,detailView应该显示所选用户的信息。也就是说,现在,当我点击注释时,所有detailViews都显示相同的用户信息(即使实际注释的显示泡泡中的细节是正确的)。我怎样才能解决这个问题?为什么NSDictionary允许我这样做?

MapViewController.m

    NSMutableDictionary *viewParams = [NSMutableDictionary new];
    [viewParams setValue:@"u000" forKey:@"view_name"];
    [DIOSView viewGet:viewParams success:^(AFHTTPRequestOperation *operation, id responseObject) {

        self.addressData = [responseObject mutableCopy];


        for (NSMutableDictionary *multiplelocations in self.addressData) {

            NSString *location = multiplelocations[@"street_address"];
            NSLog(@"Pull addresses %@", location);
            NSString *userNames = multiplelocations[@"users_name"];
            NSString *userBio = multiplelocations[@"userbio"];


        CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        [geocoder geocodeAddressString:location
                     completionHandler:^(NSArray* placemarks, NSError* error){
                        if (placemarks && placemarks.count > 0) {
                             CLPlacemark *topResult = [placemarks objectAtIndex:0];
                             MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

                             MKCoordinateRegion region = self.mapView.region;

                             region.span.longitudeDelta /= 8.0;
                             region.span.latitudeDelta /= 8.0;


                            MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
                            point.coordinate = placemark.coordinate;
                            point.title = userNames;
                            point.subtitle = userBio;

                            [self.mapView addAnnotation:point];



                            }
                     }



         ];

        }


    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Failure: %@", [error localizedDescription]);
    }];


}

 -(void)calloutTapped:(UITapGestureRecognizer *) sender
{
    NSLog(@"Callout was tapped");



    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    OtherUserViewController *yourViewController = (OtherUserViewController *)[storyboard instantiateViewControllerWithIdentifier:@"OtherUserViewController"];

    NSDictionary *dictionary = [[NSDictionary alloc] init];
    dictionary = [[self.addressData firstObject] mutableCopy];

    yourViewController.mapuserData = dictionary; 


   [self.navigationController pushViewController:yourViewController animated:YES];

}

通过控制台的self.addressData

 {
        address = "1300 Fake Street, Vancouver, BC";
        childrenunder = No;
        city = Va;
        "emergency facility" = Yes;
        "first name" = Admin;
        "last name" = Account;
        phone = "Not Available";
        "photo_path" = "http://myurl.com/files/stored/1461176121.jpg";
        "postal code" = V6B0L1;
        "profile photo" = "<img typeof=\"foaf:Image\" src=\"stored/1461176121.jpg\" width=\"300\" height=\"300\" alt=\"\" />";
        "property type" = House;
        province = B;
        "street_address" = "1300 Fake Street, Vancouver, BC";
        supervision = Yes;
        uid = 1;
        userbio = "Need assistance? This account belongs to the team! Message us if you have any questions.";
        "users_name" = Britt;
    }
)

2 个答案:

答案 0 :(得分:1)

dictionary = [[self.addressData firstObject] mutableCopy];
你是认真的吗?

这应该是

NSMutableDictionary *dictionary = [self.addressData  mutableCopy];

答案 1 :(得分:0)

导航到详细视图控制器时,您总是从字典数组中获取第一个对象。

[[self.addressData firstObject] mutableCopy];

这就是为所有注释视图获取相同信息的原因。

代替那行代码,您必须确定在MapView上单击哪个地图标记,例如标识字典数组的索引。从数组中选择字典并将其传递给详细信息视图。