2012-08-09 75 views
0

我努力顯示只有20行NSFetchedResultsController在UITableView中。iOS UITableView:顯示只有20行fetchedResultsController有500個對象

目前的UITableView顯示了從NSFetchedResultsController的對象的所有數據:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [[self.fetchedResultsController fetchedObjects] count]; 
} 

我想要做的是首先顯示20行,那麼當用戶滾動到21行,它會裝載20個。但在此之前,我想了解如何限制tableView行。

我周圍搜索,嘗試了別人的建議,但仍然缺乏理解。請指導我點燈...

+0

爲什麼不直接返回MIN(20,[[self.fetchedResultsController fetchedObjects] count]);'? – 2012-08-09 19:29:13

+0

謝謝。這工作非常好。 – WJR 2012-08-10 05:32:46

+0

你好丹!我想知道,如果你已經嘗試使用這個解決方案與nsfetchedresultscontroller控制器:didChangeObject:atIndexPath:forChangeType:newIndexPath:?它不適合我。每當控制器發生變化時,當試圖插入索引>我希望顯示的數字的單元格時,它會返回錯誤。有什麼建議? – Irina 2013-12-16 20:40:03

回答

2

NSFetchRequest有一個方法叫做fetchLimit。你可以將它設置爲20,它只會獲取20.

這就是說,我不太清楚爲什麼你想要你描述的。

+0

謝謝你,但問題是我需要顯示用戶的結果,我只是通過計數fetchedObjects的總數。顯然,在我的情況下,設置fetchLimit會扭曲總體結果。 – WJR 2012-08-10 00:09:34

+0

那麼Dan F的評論呢? – aforaudrey 2012-08-10 00:15:41

+0

是的,我想我絕對可以從Dan和Michaels的評論開始。 – WJR 2012-08-10 05:30:21

0

相反的:

return [[self.fetchedResultsController fetchedObjects] count]; 

用途:

return (20 * X); 

其中X爲你添加更多的結果,以您的表視圖多少次,當然也受到數量的限制記錄您在CoreData數據庫中的記錄。

這裏的訣竅是根據您的用戶界面決定如何觸發對X增量的更改。一旦你增加了X,你就可以調用UITableView的[insertRowsAtIndexPaths: withRowAnimation:] method

當然,您需要確保您的後備商店與當前在表格中顯示的內容相匹配(這使得iBlue的回答也非常相關......也就是+1!)。

+0

邁克爾你好!我想知道,如果你已經嘗試使用這個解決方案與nsfetchedresultscontroller控制器:didChangeObject:atIndexPath:forChangeType:newIndexPath:?它不適合我。每當控制器發生變化時,當試圖插入索引>我希望顯示的數字的單元格時,它會返回錯誤。有什麼建議? – Irina 2013-12-16 20:43:18

0

的fetchedObjects陣列的數量可能不會有什麼你想這樣做,因爲它不會更新持久性存儲中的更改。來自NSFetchedResultsController文檔:

結果數組只包括由獲取請求(fetchRequest)指定的實體實例,並且它與其謂詞相匹配。 (如果提取請求沒有謂詞,則結果數組包括由提取請求指定的實體的所有實例。)

結果數組反映受控對象在託管對象上下文中的內存中狀態,而不是他們的狀態在持續存儲中。但是,返回的數組不會隨着託管對象的插入,修改或刪除而更新。

如果您只想獲取20個對象,請設置NSFetchRequest的提取限制。如果您只想在內存中保留20個對象,請使用NSFetchRequest對象的setBatchSize。

相關問題