从 fetchedResultsController fetchedObjects 中移除一个对象

Posted

技术标签:

【中文标题】从 fetchedResultsController fetchedObjects 中移除一个对象【英文标题】:removing an object from a fetchedResultsController fetchedObjects 【发布时间】:2013-04-05 08:14:18 【问题描述】:

是否可以从 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 
                
            

我该怎么做?

【问题讨论】:

是要删除对象还是只是将其从结果中删除? @Svena 我只想从结果中删除它 【参考方案1】:

从数据存储中删除对象:

[self.managedObjectContext deleteObject:object]; 
[self.managedObjectContext save:nil]; 
[self.fetchedResultsController self.fetchedResultsController.fetchRequest]; 
[tableView reloadData]; 

要从获取的结果控制器数组中删除对象,您需要更改谓词。确保禁用缓存(或更改缓存名称)以使其正常工作。

【讨论】:

【参考方案2】:

我认为您可以定义一个“排除”属性或类似整数类型的属性,并将该属性合并到您的获取请求谓词中。现在,当您将报价标记为已排除时,获取的结果控制器将为您完成所有繁重的工作,而无需重新获取。

更新 #1

在这里解决更大的问题,我认为在获取的结果控制器谓词中使用子查询是更好的主意。

尝试使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(quotes, $x, $x.pack.packName IN %@).@count > 0", allowedPackNames];

作为获取结果控制器的获取请求的谓词,忘记手动过滤。

基本上,这个子查询应该为您做的就是过滤掉所有引用计数符合您的 packName 标准的作者。我承认我没有测试这个查询。如果您说这对您不起作用,我会自己解决问题并进行测试。

【讨论】:

您能否先详细解释一下您要做什么。您的问题非常直截了当,但我想了解您正在解决的整个问题。 试图获取所有带引号的作者,其中每个 Quote 对象在 allowedPackName 数组中都有一个带有 packName 的包。 更新了我的答案以适合您的问题。 这不起作用'未实现的谓词 SQL 生成:($x.packName IN "success, happy, free, business, dreamlove, change")' 这里真的需要子查询吗?我认为更简单的“ANY quotes.pack.packName IN %@”应该可以,将我的答案 ***.com/a/15829628/1187415 与您的其他问题进行比较。

以上是关于从 fetchedResultsController fetchedObjects 中移除一个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像

从PRISM开始学WPFMVVMCommand?

从PRISM开始学WPFPrism?