skobbler可以缓存json数据吗?

时间:2015-04-21 07:46:41

标签: ios iphone maps skmaps

我正在使用skobbler和skmaps为下载离线的应用程序使用地图的某些区域。我使用了我在框架包示例中找到的代码,在本例中是

MapJSONViewController
MapDownloadViewController

我已经实现了app委托代码,所以每次启动应用程序时,它都会下载并解析约1mb的json

- (void)mapsVersioningManager:(SKMapsVersioningManager *)versioningManager loadedWithMapVersion:(NSString *)currentMapVersion
{
    [[XMLParser sharedInstance] downloadAndParseJSON];
}

可以避免这种行为吗?如果没有必要,我不想在每个app init下载1mb的json数据...也许我可以下载并在我的应用程序中包含一个物理地图json文件以获得一个开始版本?或者这个"当地行为"我的应用程序很快就会使用过时的json版本吗?也许另一种行为是维护一个带有数据的本地版本,并且每周仅重新下载一次......例如,在我看来这是一个常见的问题,有人会如何实现一个方便的行为?

1 个答案:

答案 0 :(得分:2)

是的,您可以在应用中添加json文件&从磁盘读取它。

在XMLParser.m中,将downloadAndParseJson中的代码替换为:

- (void)downloadAndParseJSON
{
    [self parseJSON];

    NSString *libraryFolderPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSLog(@"%@",libraryFolderPath);
}

和parseJSON:

- (void)parseJSON
{
    NSString *jsonString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Maps" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];

    SKTMapsObject *skMaps = [SKTMapsObject convertFromJSON:jsonString];

    AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
    [appDelegate setSkMapsObject:skMaps];

    self.isParsingFinished = YES;
    [[NSNotificationCenter defaultCenter]postNotificationName:kParsingFinishedNotificationName object:nil];
}

Here你可以找到一个修改过的演示项目,它从资源中读取Maps.json文件(.json文件包含在资源文件夹中)。