1

我正在编写一个 iPhone 应用程序,它从云中的数据库加载菜单数据。我正在使用 AFNetworking(特别是 AFJSONRequestOperation)下载 appDelegate 中的数据。

到目前为止一切正常,但我还需要该应用程序能够在应用程序离线时加载菜单。为了处理这个问题,我想在 AFJSONRequestOperation 调用检索到返回的 JSON 数据后将其保存到磁盘。

我最初的策略是将返回的 JSON 保存为字符串,但我找不到从 AFJSONRequestOperation 获取字符串响应的方法。对 Web 服务进行两次调用(一个返回 JSON 对象,另一个返回文本)似乎很愚蠢,尽管这很简单。我想知道是否有更好或更有效的方法来做到这一点。我可以跳过 AFJSONRequest 并选择一个普通的 AFHttpRequest 但是我需要手动构造 JSON 对象。

有没有比我想的两个更好的选择?在我看来,正确的答案将涉及构造 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];

另一种选择是从 AFNetworking 获取您的 responseObject。大概是一个格式良好的 NSDictionary 并简单地将其放在 NSUserDefaults 中以进行半持久存储。您需要确保您的字典中没有任何空值,因为 NSUserDefaults 不能很好地处理空值。

于 2013-03-02T00:22:32.293 回答