2015-04-03 77 views
0

我使用的核心數據,看是否在表視圖中的消息已被用戶看到過。我這樣做的方式是消息ID保存到核心數據第一次看到,然後我跑的時候我更新表視圖,查看是否有在持久性存儲器具有相同ID的條目的讀取請求。 現在我想知道的是我應該如何最有效地實現我的讀取請求的基礎上,耗時有多。我應該要麼運行,返回所有已保存的消息ID爲陣列的視圖加載時的請求,然後在cellForRowAtIndexPath檢查如果數組包含電池的消息ID,或運行在cellForRowAtIndexPath謂詞獲取請求?後者將是我的首選方法,但如果我有100左右的單元格,我想知道這是否是禮儀差。 任何幫助將非常感激。的iOS核心數據讀取請求時,如何使用

這是我取請求:

func persistQuery(predicateValueString: String!) -> Bool! { 

let fetchRequest = NSFetchRequest(entityName: "LogItem") 
let predicate = NSPredicate(format: "itemText == %@", predicateValueString) 

fetchRequest.predicate = predicate 

var didFindResult = true 

if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [LogItem] { 

    if fetchResults.count == 0 { 
     didFindResult=false 
    } 
} 

return didFindResult 

}

+0

嘗試您的兩個選項和配置文件,看看哪一個最好的(通常是除非你預期的條件下進行測試時,觀察問題不必擔心它)的有益響應 – Wain 2015-04-03 21:52:36

回答

0

最好的辦法是使用NSFetchedResultsController。它會優化取回和內存佔用。它是專門爲表格視圖設計的。

要開始,看看Xcode的模板(主/詳細信息,請查看核心數據)。這真的很簡單。

確保你還實現了委託方法 - 當你的託管對象發生變化時,它們將自動被調用,所以只有很少的代碼被執行來更新UI(只有當對象實際上在屏幕上時)。

大概你的每個表格視圖單元格都代表一個LogItem(NSManagedObject子類),它帶有一個屬性以指示read狀態。一旦你改變了它,委託方法將嘗試根據索引路徑對其進行更新。

就是這樣。使用獲取的結果控制器可以免費獲得大量優化,所以我強烈建議每當使用Core Data實體填充表視圖時使用它。

+0

謝謝,但是我沒有實際使用存儲的數據填充表格。數據源來自我們的後端,但爲了保持我的服務器請求低我在設備本身存儲讀取狀態 – TimWhiting 2015-04-04 00:14:29

+0

我明白了。您應該確保將數據顯示在設備中,而不僅僅存儲在內存中。上述方案是適當的。無論如何,你都要解析郵件的全部文本。也許如果你只有ids,你可以減少它,但如果你可以在本地保存數據,UX可能會更好。 – Mundi 2015-04-04 09:24:21