2017-08-14 89 views
2

我正在使用xcode來編寫iOS應用程序。我想在應用中設置一個用戶可以留言的部分。對於如何存儲特定帖子的評論集,我有點困惑。我基本上只需要爲每個評論保存三件事。用戶的ID,評論本身和評論的數量(即發佈該帖子的第一條評論,或第二,第三等...),但我不知道如何最好地將其實際保存到數據庫。我使用parse-server作爲主數據庫,問題是雖然此數據庫可以存儲對象的多種質量,但不能保存字典。 (我本來想保存信息爲):
期望中的戰略(但不工作)如何構建數據以保存用戶評論?

var commentCount = 5 //will hold value of number of comments for post 
var commentString = "hello" 
var commenterID = "e1das312" 


var commentSavingDict = [Int: [String]]() 
func addComment(){ 
    commentCount = commentCount + 1 
    commentSavingDict[commentCount] = [commenterID, commentString] 
} 

的問題是,在解析儀表盤只有陣列可以被保存,而不是詞典作爲commentSavingDict是。我認爲只是節省了串大抵如此:

第二項策略

var commentCount = 5 //will hold value of number of comments for post 
var commentString = "hello" 
var commenterID = "e1das312" 


var commentSavingArray = [String]() 
func addComment(){ 
    commentCount = commentCount + 1 
    commentSavingArray.append("\(commentCount) :::: \(commentString) :::: \(commenterID)") 
} 

這種方法是有效的,但需要拉從陣列中的每個條目,然後在::::.split分隔字符串將每個部分傾倒成3個獨立的陣列,然後以這種方式利用它們。這需要更長的時間,因爲拆分需要客戶端。

第三種策略
最後的辦法,我設想也只是讓每個評論是在數據庫中它自己的對象,有四個不同的特質:評論的數量,評論,帖子的ID,和用戶的ID。這也會起作用,但它現在使每個評論成爲它自己的對象,而不是作爲特定帖子的所有評論陣列(作爲單個對象),我認爲這樣做效率低下並且很快就會佔用空間。

由於我無法保存字典,有沒有比我所建議的更好的方法來解決這個問題?還是我錯誤地分析了我提出的那些?

回答

1

你的第三個策略是要走的路。實際上,Parse iOS Developer's Guide有一個非常熟悉的例子。每條評論都通過指針鏈接到原始文章。當你來檢索帖子的評論時,這確實涉及額外的提取,但它比試圖將評論對象置於帖子本身的數組列中更具可擴展性。數組列對於更小,更簡單的集合更有用。

這不是沒有一些邊緣情況的限制。例如,如果您想在時間軸上顯示帖子的評論數量,則必須爲每個帖子在屏幕上提取所有評論。通常的解決方案是在郵件本身存儲計數器,並在添加/刪除註釋時更新它(理想情況下,通過Cloud代碼中的afterSave觸發器)。

一個額外的注意事項 - 你可以避免存儲'評論號碼',而是依賴評論日期createdAt。您可以通過過濾帖子並按創建日期排序來檢索您的評論。

+0

感謝您的回覆和指南的鏈接!但是,你能評論我對它的擔憂嗎?是否通過與其他方法相比增加對象的數量來爲每個評論創建單獨的對象而不會使數據庫停滯不前? –

+1

想想這樣 - 你不會創建任何更多或更少的對象,只是因爲你每行存儲一行而不是一行。它仍然是相同數量的信息。事實上,使用單獨的對象可能在數據層面上更有效率,因爲這是它期望的結構,並且已經進行了優化。 –