skobbler 我可以缓存 json 数据吗?

skobbler can i cache json data?

我将 skobbler 和 skmaps 用于一个应用程序,该应用程序下载后可以离线使用地图的某些区域。我正在使用我在框架包示例中找到的代码,在本例中

MapJSONViewController
MapDownloadViewController

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

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

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

是的,您可以将 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 文件包含在资源文件夹中)。