0

私はtableViewControllerで始めています。セルをタップすると、MapViewControllerで宣言したメソッドを実行するmapViewにポップします。

MapViewController *category1 = [[MapViewController alloc] init];
     NSArray *array=[self.navigationController viewControllers];
[category1 categoryDining];
            [self.navigationController popToViewController:[array objectAtIndex:[array count]-2] animated:YES];

これは完全に正常に機能します。mapViewController にポップし、次のメソッドを実行します。

-(void)categoryDining{
    //user's location
locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];

CLGeocoder *fgeo = [[CLGeocoder alloc] init];
[fgeo reverseGeocodeLocation:locationManager.location completionHandler:^(NSArray *placemarks, NSError *error) {
    if (!error) {
        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        zip = placemark.postalCode;

        NSLog(@"%@", zip);
        // Make the URL connection in order to download JSON/XML data.
        NSString *stringSearch = @"http://api.onebigplanet.com/ws/local-daily-deals?wsToken=&wsVersion=3.0.0&numItems=30&out=json&categoryId=11&radiusInMiles=100&zipCode=";
        NSString *combined = [NSString stringWithFormat:@"%@%@", stringSearch, zip];
        NSLog(@"%@",combined);

        NSURL *url = [NSURL URLWithString:combined];
        NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];

        // Error and success message handling.
        [NSURLConnection
         sendAsynchronousRequest:urlRequest
         queue:queue
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
             if([data length] > 0 &&
                error == nil){
                 NSData *jsonData = data;

                 if (jsonData != nil){
                     NSError *error = nil;

                     self.result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

                     if(error == nil)

                         self.mapLocations = result;

                     //NSLog(@"%@", result);

                     for (NSDictionary *location in self.mapLocations[@"merchants"]) {

                         for (NSDictionary *locations in location[@"branches"]) {
                             NSLog(@"%@",locations);
                             CLLocationCoordinate2D annotationCoordinate =
                             CLLocationCoordinate2DMake([locations[@"latitude"] doubleValue],
                                                        [locations[@"longitude"] doubleValue]);
                             Annotation *annotation = [[Annotation alloc] init];
                             annotation.coordinate = annotationCoordinate;
                             annotation.title = locations[@"name"];
                             annotation.subtitle = locations[@"street"];
                             [self.mapView addAnnotation:annotation];

                         }
                     }
                 }
                 else if ([data length] == 0 &&
                          error == nil){
                     NSLog(@"Nothing was downloaded");

                 }
                 else if (error != nil){
                     NSLog(@"Error happened = %@", error);

                 }
             }

         }];

    }
}];

}

結果をログアウトしてテストしましたが、それら (マーカー/ピン) はマップに表示されません。何らかの理由で、別のviewControllerからメソッドを呼び出すと、そのメソッドに対してViewDidLoadおよびViewWillLoadメソッドが呼び出されないと考えています。ある種の委任と協力する必要があると考えていますが、これをどのように行うかについて少し確信が持てません。どんな助けでも大歓迎です。

4

1 に答える 1