【发布时间】:2015-07-02 08:58:46
【问题描述】:
我在项目中包含的 KML 文件可以正确解析,而从服务器下载的同一个文件却不能正确解析?!
我修改了Apple's KML parsing example 以解析 KML 文件。如果我将 KML 文件直接添加到 Xcode 项目中,它会正确解析并按预期在地图上显示它的折线、注释等。但是,如果我从我的服务器下载相同的 KML 文件,将其保存到磁盘并尝试解析它,则解析不起作用。即解析器在文件中找不到任何要解析的元素,因此地图上没有显示任何内容!
首先,我已验证文件已正确下载并保存到磁盘。我检查了模拟器的数据(SimPholders 是一个方便的工具)以获取文件并将其与原始文件进行比较以防损坏,那里没有问题,它可以正确下载并保存,没有损坏。
接下来,我检查了我传递给 KML 解析器的文件的 URL,以确保它是正确的并且没问题。我使用 NSFileManager fileExistsAtPath 来确定这一点,KML 文件位于我提供给解析器的路径中。
在地图视图控制器的 viewDidLoad 方法中,我从服务器下载文件并将其传递给解析器。
- (void)viewDidLoad
{
[super viewDidLoad];
[[KmlDownloader sharedKmlDownloader] downloadFileFrom:@"http://www.myserver.com/file.kml" isAsyncDownload:NO];
NSURL *kmlUrl = [[KmlDownloader sharedKmlDownloader] urlForKmlFile];
if (kmlUrl)
{
kmlParser = [[KMLParser alloc] initWithURL:kmlUrl];
[kmlParser parseKML];
}
// Add all of the MKOverlay objects parsed from the KML file to the map.
NSArray *overlays = [kmlParser overlays];
[map addOverlays:overlays];
// Add all of the MKAnnotation objects parsed from the KML file to the map.
NSArray *annotations = [kmlParser points];
[map addAnnotations:annotations];
// Some positioning code of the view port here
}
KmlDownloader 作为参考可以在 Gist here 中找到。抱歉,格式太乱了,无法包含内联,但它是一个相对较小的文件。
任何想法为什么会发生这种情况?非常感谢。
【问题讨论】:
标签: ios objective-c xml parsing kml