我正在執行一個返回約2000個實體的讀取請求。目前,我的設備需要大約20秒。所以我想我可能會設置一個100的提取限制,然後當用戶滾動到表視圖的末尾時,獲取接下來的100個實體。這可以使用NSFetchRequest's
setFetchLimit
和setFetchOffset
來完成。批處理核心數據讀取結果
但是,我無法弄清楚的是,如果在我第二次抓取對象101-200時,對象1-100會發生什麼?我是否必須爲每100個項目分別使用NSFetchedResultsController
,然後將我的表視圖數據源方法配置爲基於多個提取結果控制器進行查詢?或者我可以以某種方式使用相同的NSFetchedResultsController
以某種方式一次獲取100個實體,但是在每次後續提取時,只需將接下來的100個項目添加到原始的100個項目中?
編輯:這是我的代碼:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"MessageObject" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate= [NSPredicate predicateWithFormat:@"ANY tags.tagName==%@", currentTagObject.tagName];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO selector:@selector(compare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:5];
你可以顯示你的構建的獲取請求?據我所知,獲取結果控制器(我認爲簡單的獲取請求也是)使用錯誤來爲你做這件事。有可能您的「查詢」可以被優化。 –
我已經發布了一些我的代碼。我不明白 - 爲什麼需要20秒才能獲取實體呢?當我設置100的限制時,它在1秒內獲取,但沒有限制,獲取2000個實體,需要20秒。 – Snowman