2013-03-02 47 views
1

我正在编写一个iPhone应用程序,可从云中的数据库加载菜单数据。我正在使用AFNetworking(特别是AFJSONRequestOperation)来下载appDelegate中的数据。iOS - 使用AFNetworking保存和保存JSON结果的策略

一切工作正常,直到这一点,但我也需要应用程序能够加载菜单,当应用程序脱机。为了处理这个问题,我想在返回的JSON数据被AFJSONRequestOperation调用检索后保存到光盘中。

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

有没有比我想到的两个更好的选择?在我看来,正确的答案将涉及构建JSON对象的单个调用,并且还允许我访问原始文本响应,但我愿意听取替代方案。

回答

4

请勿将其另存为JSON字符串级别。 AFNetworking将根据您的JSON结构将JSON作为NSArray或NSDictionary返回。

您可以将数组或字典保存为plist。

看到-[NSDictionary writeToURL:atomically:]-[NSArray writeToURL:atomically:]

+0

这对我有意义..感谢您的意见。但是,为什么我会使用writeToURL和writeToString? – itslittlejohn 2013-03-02 01:00:55

+0

@itslittlejohn我不确定你在说什么writeToString方法。 AFNetworking,NSJSONSerialization,NSDictionary或NSArray中没有writeToString。 – 2013-03-02 01:48:29

+0

对不起..我的意思是writeToFile方法,而不是writeToString。我结束了使用writeToFile。 – itslittlejohn 2013-03-02 21:33:17

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不能很好地使用空值。

+1

我想过NSUserDefaults的使用,但似乎默认值是最适合用户的喜好保留。你认为这比保存Plist更好吗? – itslittlejohn 2013-03-02 01:07:34