【发布时间】:2013-05-08 20:56:51
【问题描述】:
我有一个 Web 服务来获取 JSON 表单中的数据。每次应用程序启动(在appDidFinishLaunching 方法内)并将其存储在本地文件中时,我都会调用此服务。我只想在应用程序第一次启动时调用该服务,并且从下一次我只想使用我存储了我的JSON 数据的文件。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//live json data url
NSURL *url = [NSURL URLWithString:@"My Url"];
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];
}
NSError *jsonError = nil;
NSString *jsonFilePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"];
NSData *jsonData = [NSData dataWithContentsOfFile:jsonFilePath options:kNilOptions error:&jsonError ];
NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];
self.serverResponseArray = jsonArray;
NSLog(@"%@",self.serverResponseArray);
通过这段代码,我正在编写 JSON 对本地文件的响应并将其存储在一个数组中以在整个应用程序中使用它。
【问题讨论】:
-
你可以在尝试加载数据之前测试文件的存在吗?
-
我该如何检查。 ?
-
第一次加载 json,并将其存储在具有特定名称的本地文件中(如果我理解得很好)。下次启动应用程序时,如果存在具有该名称的文件,则无需加载 json,只需使用该文件即可。但只是出于好奇,您不希望每次启动应用程序时都更新这些数据吗?
-
你的好奇心其实很好,但我需要这些数据,即使突然网络中断或建筑物地下室的网络很差。好吧,您能否告诉我们如何检查该文件名是否存在。我不知道如何检查文件的存在。任何链接都会有所帮助。
-
google上有很多资源在讲,比较简单,直接搜索objective-c write/read file即可。
标签: iphone ios objective-c json