上記のスクリーンショットでは、アプリにjsonファイル(productDetail.json)があるので、次のコードのようにjsonデータからファイルを書き込みます。
else if([(MultipleURLConnection *)connection tag]==2)
{
if([fn writeToFile:responseData fileName:@"productDetail.json"])
[self performSelector:@selector(loadingJSON) withObject:nil afterDelay:0.1];
}
上記のコードでは、responseDataはNSMutableDataであり、fnは関数クラスオブジェクト名です。ここで、以下のメソッドがあります。
- (BOOL)writeToFile:(NSData *)data fileName:(NSString *)fileName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myFile = [documentsDirectory stringByAppendingPathComponent:fileName];
NSFileManager *fm = [NSFileManager defaultManager];
if (![fm fileExistsAtPath:myFile]) // if file doesn't exist, create it
return ([fm createFileAtPath:myFile contents:data attributes:nil]);
else
return ([data writeToFile:myFile atomically:YES]);
}
今、私はアプリからjsonファイルを削除し、それをサーバーに配置してからフェッチすることにしました。サーバーにjsonファイルを配置した後、以下のコーディングのようにフェッチしようとしました
else if([(MultipleURLConnection *)connection tag]==2)
{
NSURL *url = [NSURL URLWithString:@"http://mysite.com/Infomist/productDetail.json"];
NSData *jsonData = [NSData dataWithContentsOfURL:url];
if(jsonData != nil)
{
NSError *error = nil;
id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error == nil)
NSLog(@"show data %@",result);
}
上記のメソッドはサーバーからデータを正常にフェッチし、NSlogにすべてのデータを表示しますが、私にとっての問題は、このメソッドを今すぐ変更する方法です。
if([fn writeToFile:responseData fileName:@"])
サーバーにjsonファイルを配置した後、上記のメソッドでファイル名を渡して呼び出すファイルがないため、
- (BOOL)writeToFile:(NSData *)data fileName:(NSString *)fileName .
ローカルのjsonファイルのアプリフローがすでにあるので、アプリにjsonデータを書き込むだけで済みます。