Переключился с моего собственного диспетчера очереди асинхронной загрузки на реализацию «Все видят я». Проблема стала спорным.

ание картографического приложения на iOS с использованием плиток OpenStreetMap. Изображения фрагментов карты загружаются асинхронно и сохраняются в словаре или сохраняются в БД SQLite.

Иногда, по какой-либо причине, при попытке визуализировать изображение карты, я получаю следующую ошибку:
ImageIO: <ERROR> PNGinvalid distance too far back

Это приводит к появлению на моей карте неприятных черных квадратов.

Это фрагмент кода, в котором это происходит:

NSData *imageData = [TileDownloader RetrieveDataAtTileX:(int)tilex Y:(int)tiley Zoom:(int)zoomLevel];  
if (imageData != nil) {
    NSLog(@"Obtained image data\n");
    UIImage *img = [[UIImage imageWithData:imageData] retain];
    // Perform the image render on the current UI context.  
    // ERROR OCCURS BETWEEN PUSH AND POP
    UIGraphicsPushContext(context);
    [img drawInRect:[self rectForMapRect:mapRect] blendMode:kCGBlendModeNormal alpha:1.0f];
    UIGraphicsPopContext();
    [img release];
}

Теперь то, что я ищу, это способ убедиться, что png действителен, прежде чем пытаться отобразить его на моей карте.

Редактировать: Система также иногда выдает эту ошибку:
ImageIO: <ERROR> PNGIDAT: CRC error

Ответы на вопрос(4)

Ваш ответ на вопрос