After working with the idea, thereβs something else that I came up with.
When the application is installed, the package has a default data file that I copy to the Documents folder. When the didFinishLaunchingWithOptions application didFinishLaunchingWithOptions , I call the following method:
- (void)writeJsonToFile { //applications Documents dirctory path NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; //live json data url NSString *stringURL = @"http://path-to-live-file.json"; NSURL *url = [NSURL URLWithString:stringURL]; NSData *urlData = [NSData dataWithContentsOfURL:url]; //attempt to download live data if (urlData) { NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; [urlData writeToFile:filePath atomically:YES]; } //copy data from initial package into the applications Documents folder else { //file to write to NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; //file to copy from NSString *json = [ [NSBundle mainBundle] pathForResource:@"data" ofType:@"json" inDirectory:@"html/data" ]; NSData *jsonData = [NSData dataWithContentsOfFile:json options:kNilOptions error:nil]; //write file to device [jsonData writeToFile:filePath atomically:YES]; } }
Then, throughout the application, when I need to reference the data, I use the saved file.
//application Documents dirctory path NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSError *jsonError = nil; NSString *jsonFilePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"]; NSData *jsonData = [NSData dataWithContentsOfFile:jsonFilePath options:kNilOptions error:&jsonError ];
To reference the json file in my JS code, I added the URL parameter for "src" and passed the path to the Applications folder.
request.open('GET', src, false);
source share