在iOS上编写地图应用程序,使用OpenStreetMap切片。 地图平铺图像被异步下载并存储在字典中,或者保存在SQLite数据库中。iOS上的PNG验证
有时候,不管出于什么原因,而为了显示地图平铺图像,我得到以下错误:
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
你得到一个UIImage对象回来的时候发生这种情况?我希望'img'是'nil',这是你的有效验证。 – Tommy
那么,鉴于我正在加载原始数据,并且它抛出了一个PNG错误,我怀疑UIImage对象是建立的,但其包含的数据是问题。 –
我认为'+ imageWithData:'会更容易发现错误并返回'nil'。如果你已经测试过,那不是那么公平,但我真的认为你应该测试它。 – Tommy