2011-04-18 55 views
1

我使用SBJsonParser解析來自服務器的大型json響應I查詢。我希望使用時間戳方法來了解何時需要重新獲取並重新解析所有數據,所以我想知道如何在不需要的時候保存數據請求大的JSON包來刷新我的數據。在iOS中保存JSON對象

我想我應該使用NSCoding協議和歸檔大致如下所示:

// alloc nsdata obj 
NSMutableData *data = [[[NSMutableData alloc] init] autorelease]; 

// create archiver 
NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease]; 

// archive whiteboard 
[archiver encodeObject:mSaveData forKey:@"Data"]; 
[archiver finishEncoding]; 
[data writeToFile:dataPath atomically:YES]; 

但有一個簡單的方法來編碼這個JSON對象,它是真正NSDictionaries的一個NSArray,或做我必須精心編碼這個對象內的每個字段?

也許有一個更簡單的方法,比如將json對象本身保存爲一個字符串(在用objectWithData方法分析之前),並在每次應用程序加載並想要使用本地副本時重新解析它?

回答

2

由於您要保存的數據只是NSArrays,NSDictionaries,可能是像NSStrings和NSNumbers這樣的東西,我不明白爲什麼您需要「精心編碼每個字段」。你用NSKeyedArchiver做的方式是有效的,你不需要任何進一步的代碼來保存。其他選項:

  • 使用+[NSKeyedArchiver archiveRootObject:toFile:]
  • 使用SBJSON將數據轉回JSON並將JSON字符串存儲爲UTF-8數據。
  • 使用+[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:]另存爲plist。
+0

謝謝,但我的理解是,被編碼的對象必須實現NSCoding協議,然後實質上調用encode___方法(在encodeWithCoder:方法中)爲每個保存的數據片段。你是說我可以簡單地使用encodeObject:forKey:方法並傳遞NSArray,或者將archiveArray:toFile:方法中的NSArray作爲根對象傳遞(不需要遍歷每個字段),它將只保存所有數據即使它是一個字典和數組的嵌套數組等? – Joey 2011-04-18 19:50:35

+0

通過NSArray作爲根對象,你應該很好去。當你解碼它時,你會返回數組作爲根對象。 – 2011-04-18 19:52:35

+0

好的。這是因爲NSArray對象本地實現了根據需要的nscoding協議? – Joey 2011-04-18 19:55:01

0

AsiHTTP允許您緩存您的請求。它實現你需要的功能