从fetchedResultsController fetchedObjects中删除一个对象

时间:2013-04-05 08:14:18

标签: iphone ios objective-c ipad core-data

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

我该怎么做?

2 个答案:

答案 0 :(得分:3)

从数据存储中删除对象:

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

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

答案 1 :(得分:1)

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

更新#1

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

尝试使用:

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

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

基本上这个子查询应该为你做的是过滤掉所有引用计数符合你的packName标准的作者。我承认我没有测试这个查询。如果你说这对你不起作用,我会经历麻烦并亲自测试。