2010-08-30 32 views
3

大家好,限制NSFetchedResultsController結果,並獲得更多的

我現在有一個NSFetchedResultsController設置返回在我的核心數據的數據庫表中的所有行。這會填充我的UITableView。麻煩在於,隨着行數的增加,這將很快失去控制。

如何將初始查詢限制爲說20條結果,然後在某處添加一個按鈕以從我們離開的位置「獲取更多」?

感謝您的任何指導,始終

回答

2

這是控制與NSFetchRequest的-setFetchLimit:-setFetchOffSet

如果我沒有記錯,NSFetchedResultsController的缺點是在創建NSFetchedResultsController實例後無法修改提取請求。我相信這意味着每次更改要檢索/顯示的範圍時,都必須創建一個新的實例(帶有新提取請求的實例)。

如果您覺得情況不是這樣,請在蘋果的bugreporter.apple.com上提出增強請求。

+0

聽起來很凌亂......在NSFetchedResultsController中返回多少數據是安全的?也許我可以以某種方式從獲取請求中過濾......它可以處理數千行嗎?就這樣我可以想出一個想法...想象我的行有4-5個屬性,包含少量數據......幾個字節。 – mootymoots 2010-08-30 21:25:30

+0

我還沒有測試過任何具體的東西,這些指標可能對您沒有多大意義,因爲我們的模型可能會有相似的表現。最好挑選一個數字(任何數字)並對其進行配置。 – 2010-08-30 22:57:51

3

要改變限制數你只需要飛:

訪問您NSFetchedResultsController實例的fetchRequest,改變限制,刪除舊的緩存,如果有任何與執行新的獲取。

代碼:

[yourFetchedResultsController.fetchRequest setFetchLimit:50]; 
[NSFetchedResultsController deleteCacheWithName:"you cache name"]; 
[yourFetchedResultsController performFetch:nil]; 
+0

添加一個'[self.tableView reloadData]'進行可視化更新。 – samwize 2014-03-29 13:48:38

0

我相信,而不是設置-setFetchLimit和限制你NSFetchRequest(新行,你必須創建一個新的reqeust),設置-fetchBatchSize只能控制多少行將被加載到內存中。說,如果你顯示每個視圖10個單元格,請將批量大小設置爲兩倍左右。在您滾動視圖時,控制器會自動將新設置加載到內存中。

1

fetchBatchSize隻影響一次提取多少個對象。它不會同時限制內存中的對象數量,因此仍可能會耗盡內存。可以通過batchSize,fetchLimit和offset的組合限制總併發對象,但它需要刪除緩存或爲每個「頁面」存儲單獨的緩存,這對我來說似乎並不理想。

另一個更危險的方法是重新創建NSFetchedResultsController,如果可能的話,舊控制器的結果將發生故障,並且您可以從乾淨的版本開始。真的很粗糙,但它避免了刪除緩存。