title: Offline Map in iOS
body: <p>I have a big need to do an offline map for my app, as it is made mostly for Thailand, where internet connection is often hard to come by.  I am using OpenStreetMap right now for my <code>MKTileOverlay</code> but am having issues implementing it for offline use.  I have found a tutorial that says to subclass MKTileOverlay.  So, in my ViewController where the map is I have:</p>
  
  <pre><code> -(void) viewWillAppear:(BOOL)animated {
  CLLocationCoordinate2D coord = {.latitude =  15.8700320, .longitude =  100.9925410};
  MKCoordinateSpan span = {.latitudeDelta =  3, .longitudeDelta =  3};
  MKCoordinateRegion region = {coord, span};
  [mapView setRegion:region];
  }
  - (void)viewDidLoad {
      [super viewDidLoad];
      self.title = @"Map";
      NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
      self.overlay = [[XXTileOverlay alloc] initWithURLTemplate:template];
      self.overlay.canReplaceMapContent = YES;
      [mapView addOverlay:self.overlay level:MKOverlayLevelAboveLabels];
  
  
  }
  - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay {
  
          return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
  
  }
  </code></pre>
  
  <p>In my subclass of MKTileOverlay, I have:</p>
  
  <pre><code>- (NSURL *)URLForTilePath:(MKTileOverlayPath)path {
      return [NSURL URLWithString:[NSString stringWithFormat:@"http://tile.openstreetmap.org/{%ld}/{%ld}/{%ld}.png", (long)path.z, (long)path.x, (long)path.y]];
  }
  
  - (void)loadTileAtPath:(MKTileOverlayPath)path
                  result:(void (^)(NSData *data, NSError *error))result
  {
      if (!result) {
          return;
      }
      NSData *cachedData = [self.cache objectForKey:[self URLForTilePath:path]];
      if (cachedData) {
          result(cachedData, nil);
      } else {
          NSURLRequest *request = [NSURLRequest requestWithURL:[self URLForTilePath:path]];
          [NSURLConnection sendAsynchronousRequest:request queue:self.operationQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
              result(data, connectionError);
          }];
      }
  }
  </code></pre>
  
  <p>The issue is that NOTHING gets loaded at all, unless I comment out the code in the subclass.  Where am I messing up?</p>