1

クラウドのデータベースからメニューデータを読み込むiPhoneアプリを書いています。appDelegateにデータをダウンロードするためにAFNetworking(具体的にはAFJSONRequestOperation)を使用しています。

この時点まではすべて正常に機能しますが、アプリがオフラインのときにメニューを読み込めるようにする必要もあります。これを処理するために、AFJSONRequestOperation呼び出しによって取得された後、返されたJSONデータをディスクに保存したいと思います。

私の最初の戦略は、返されたJSONを文字列として保存することでしたが、AFJSONRequestOperationから文字列応答を取得する方法が見つかりません。Webサービスを2回呼び出す(1つはJSONオブジェクトを返す、もう1つはテキストを返す)のは簡単なことですが、ばかげているようです。これを行うためのより良いまたはより効率的な方法があるかどうか知りたいのですが。AFJSONRequestをスキップしてプレーンなAFHttpRequestを選択することもできますが、その場合はJSONオブジェクトを手動で作成する必要があります。

私が考えた2つのどちらよりも良いオプションはありますか?私の意見では、正しい答えは、JSONオブジェクトを構築し、元のテキスト応答にアクセスできるようにする単一の呼び出しを含みますが、私は代替案を聞くことを受け入れています。

4

2 に答える 2

4

JSON文字列レベルとして保存しないでください。AFNetworkingは、JSON構造に応じて、JSONをNSArrayまたはNSDictionaryとして返します。

配列または辞書をplistとして保存するだけです。

見る-[NSDictionary writeToURL:atomically:]または-[NSArray writeToURL:atomically:]

于 2013-03-02T00:24:16.913 に答える
1

NSJSONSerializationを試してNSDataをディスクに保存します。

例:

NSData *dataToSave =  [NSJSONSerialization dataWithJSONObject:responseObject options:nil error:nil];

id jsonObject = [NSJSONSerialization JSONObjectWithData:dataToSave options:nil error:nil];

もう1つのオプションは、AFNetworkingからresponseObjectを取得することです。おそらく整形式のNSDictionaryであり、半永続的なストレージのためにNSUserDefaultsに配置するだけです。NSUserDefaultsはnull値でうまく機能しないため、辞書にnull値がないことを確認する必要があります。

于 2013-03-02T00:22:32.293 に答える