2013-03-02 50 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