2011-10-13 89 views
1

我是iOS新手。我的要求是從應用程序內收集幾個錯誤字符串,並定期將它們發佈到我的Web服務。每個錯誤都是一個簡單的NSString〜100個字符長。我可能會在帖子之間累積多達1000條錯誤記錄。實際的帖子將在後臺線程上完成,但錯誤日誌的集合和持久性將在主線程上完成。我試圖決定之間的持久性以下方法之一:
1)屬性列表序列化(我的日誌記錄將是NSStrings的NSArray)
2)NSUserDefaults(我的NSArray將是NSUserDefaults中某些鍵的值對象)
3)核心數據(但只有一個NSManagedObject的日誌,只有一個屬性內部的日誌消息字符串)iOS中的持久性:屬性列表序列化與NSUserDefaults與核心數據

請注意,我說「日誌」,但我正在手動執行所有日誌記錄工作。 (是否有其他選擇?)

對我來說,一個重要的因素是增量式地將日誌記錄保留在磁盤上。換句話說,如果我已經堅持了500條日誌記錄,並且501st出現了,爲了效率的原因,我不想重新保留500 + 1條日誌記錄。 看來,使用選項(1)和(2)我不能逐步堅持的東西。我想我必須每次重寫blob。我仍在學習選項(3)。 只是想在此得到專家意見的:)

回答

1

*更新* 無需核心數據或類似的東西。

只需在您的Documents目錄下創建一個文本文件,然後調用log.txt(任何事情都可以)。 當你準備好,以保存的NSArray,請使用以下方法:

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag 

當你準備好,你可以發佈文件,明確其內容,而你是準備下一個陣列。


我會使用核心數據只是因爲它使一切都如此簡單。

另一方面,你並不需要使用它們中的任何一個。如果我正確閱讀你的問題,你已經在日誌文件中保存了日誌。

您可以在NSUserDefaults中存儲lastPost日期,查找在lastPost日期後創建的日誌文件,發佈日誌文件,更新lastPost日期並完成。

在不相干的筆記上,發送這樣的日誌可能會違反應用程序準則,具體取決於您發送的內容以及對用戶有多清晰。

+0

日誌屬於應用程序的行爲而不是用戶,例如,應用程序無法加載某些媒體。我不清楚日誌記錄過程,我打算在內存中收集NSArray中的錯誤字符串,以一定的時間間隔持續它們,然後稍後發佈它們。我不確定是否有任何非手動選項可以記錄..你能提供建議嗎? –

+0

查看我更新的答案。 – sosborn

+0

謝謝sosborn。但我還有一個要求,在發佈之間,我必須定期將日誌記錄保存到文件中,以防萬一應用程序崩潰並丟失大量記錄。比方說,在每50條記錄之後,我將它們保存在文件log.txt中。對於下一個50,我將不得不刪除該文件並重新保留100條記錄等等,直到最多1000條記錄。也許我只是在這裏尋找方法來逐步堅持東西。它看起來像核心數據會允許的,但對於這種用例,我認爲平面文件足夠好。我會接受這個答案。謝謝。 –

0

您也可以使用NSJSONSerialization,它可以將您的數組以JSON文檔格式寫入文件,如果您想稍後將數據發送到服務器,這通常很有用。屬性列表和JSON規則非常相似但不完全相同。