2015-04-21 150 views
1

我正在使用skobbler和skmaps來下載離線使用地圖某些區域的應用程序。我用我的框架包的例子已經找到了代碼,在這種情況下skobbler我可以緩存json數據嗎?

MapJSONViewController 
MapDownloadViewController 

我也實現了應用程序委託代碼,所以我每次啓動應用程序時,其下載和分析JSON約1mb

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

可以避免這種行爲嗎?我不想下載1mb的json數據,如果沒有必要,每個應用程序初始化...也許我可以下載幷包括一個物理地圖json文件在我的應用程序有一個啓動版本?或者這種「本地行爲」會讓我的應用程序很快與過時的json版本一起工作?也許另一種行爲是用數據維護一個本地版本,並且每週僅重新下載一次,例如......在我看來,一個常見問題是,有人如何實現方便的行爲?

回答

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文件包含在資源文件夾中)。

+0

謝謝!它的工作原理...但在地圖更新的情況下?我無法更新主包中的文件。也許最好在文檔文件夾中設置maps.json,並構建一個環境下載和覆蓋文件只爲新的地圖版本...我可以使用委託「 - (void)mapsVersioningManager:(SKMapsVersioningManager *)versioningManager detectedNewAvailableMapVersion:(NSString *)latestMapVersion currentMapVersion:(NSString *)currentMapVersion ?或者現在使用本地maps.json它沒有意義嗎? – user31929

+0

請參閱SKMapsVersioningDelegate回調函數獲取更新地圖上的通知:http://developer.skobbler.com/getting-started/ IOS#sec33 – Ando

相關問題