簡體   English   中英

從fetchedResultsController fetchedObjects中刪除對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM