AFNetworkingで取得したJSONをローカルに保存するときに失敗する
特にAFNetworkingと直接関係あるわけではないのですが。。。
現象
AFNetworkingで取得したjsonのデータをキャッシュ的な役割で、ローカルに保存しようと、
writeToFileを使ったところ、戻り値がNOで保存できなかった。
原因
保存しようとしたJSONにnullが含まれていた。
そのnullはNSDictionaryに展開されるときに、NSNullになる。
NSDictionaryのwriteToFileでnullは保存できない。
だいたい、こんな感じです。
コード
ダメなコード
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:@"あなたの好きなURL" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *cacheFile = [DataManager cacheFilePath] ; if([responseObject writeToFile:cacheFile atomically:YES]){ NSLog(@"キャッシュの保存に成功") ; } else { NSLog(@"キャッシュの保存に失敗") ; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];
とりあえず、やりたいことができたコード
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:@"あなたの好きなURL" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *cacheFile = [DataManager cacheFilePath] ; if ([NSJSONSerialization isValidJSONObject:responseObject]){ NSLog(@"正しいJSONと判定") ; // シリアライズ NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil] ; // 保存 if([data writeToFile:cacheFile atomically:YES]){ NSLog(@"キャッシュの保存に成功") ; } else { NSLog(@"キャッシュの保存に失敗") ; } } else { NSLog(@"正常にJSONシリアライズできないオブジェクトと判断された") ; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];