我正在编写一个iPhone应用程序,用于从云中的数据库加载菜单数据。我正在使用AFNetworking(特别是AFJSONRequestOperation)在appDelegate中下载数据。
到目前为止,一切正常,但我还需要应用程序才能在应用程序离线时加载菜单。为了解决这个问题,我希望在AFJSONRequestOperation调用检索后将返回的JSON数据保存到光盘。
我的初始策略是将返回的JSON保存为字符串,但我找不到从AFJSONRequestOperation获取字符串响应的方法。对Web服务进行两次调用(一个返回JSON对象而另一个返回文本)似乎很愚蠢,尽管它很简单。我想知道是否有更好或更有效的方法来做到这一点。我可以跳过AFJSONRequest并转到一个简单的AFHttpRequest但是我需要手动构造JSON对象。
有没有比我想到的两个更好的选择?在我看来,正确的答案将涉及构建JSON对象的单个调用,并允许我访问原始文本响应,但我愿意听取替代方案。
答案 0 :(得分:4)
不要将其保存为JSON字符串级别。 AFNetworking将根据您的JSON结构将JSON作为NSArray或NSDictionary返回。
您可以将数组或字典保存为plist。
请参阅-[NSDictionary writeToURL:atomically:]
或-[NSArray writeToURL:atomically:]
答案 1 :(得分: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不能很好地使用空值。