私は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メソッドが呼び出されないと考えています。ある種の委任と協力する必要があると考えていますが、これをどのように行うかについて少し確信が持てません。どんな助けでも大歓迎です。