[英]removing an object from a fetchedResultsController fetchedObjects
是否可以從fetchedResultsController fetchedObjects中刪除對象?
例如,我有以下代碼:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pack.packName IN %@", allowedPackNames];
for (int i = 0; i < [tempFetchResults.fetchedObjects count]; i++){
Author *author = [tempFetchResults.fetchedObjects objectAtIndex:i];
NSSet *filteredQuotes = [author.quotes filteredSetUsingPredicate:predicate];
if ([filteredQuotes count] > 0){
author.quotes = filteredQuotes;
} else {
//remove this author from the fetchedObjects array
}
}
我怎樣才能做到這一點?
要從數據存儲中刪除對象:
[self.managedObjectContext deleteObject:object];
[self.managedObjectContext save:nil];
[self.fetchedResultsController self.fetchedResultsController.fetchRequest];
[tableView reloadData];
要僅從獲取的結果控制器數組中刪除對象,您需要更改謂詞。 確保禁用緩存(或更改緩存名稱)以使其正常工作。
我認為您可以定義“排除”屬性或類似整數類型的屬性,然后將該屬性合並到您的提取請求謂詞中。 現在,當您將報價標記為已排除時,提取結果控制器將為您完成所有繁重的工作,而無需重新提取所有內容。
更新#1
在這里解決更大的問題,我認為在提取的結果控制器謂詞中使用子查詢是更好的主意。
嘗試使用:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(quotes, $x, $x.pack.packName IN %@).@count > 0", allowedPackNames];
作為您對提取結果控制器的提取請求的謂詞,而無需進行手動過濾。
基本上,此子查詢應該為您執行的操作是過濾出所有引號都符合您的packName條件的作者。 我承認我沒有測試此查詢。 如果您說這對您不起作用,我將自己解決一下麻煩並進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.