2013-04-05 92 views
1

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

我怎样才能做到这一点?

+0

是否有意删除对象或只是从结果中删除它? – svena 2013-04-05 08:16:54

+0

@Svena我只是想从结果中删除它 – xonegirlz 2013-04-05 08:22:21

回答

2

从数据存储中删除对象:

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

为了刚刚从获取的成果控制器阵列中删除该对象,您需要更改的断言。确保您禁用缓存(或更改缓存名称)以使其正常工作。

0

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

更新#1

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

尝试使用:

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

为用于读取的结果控制您的读取请求断言,忘记手动筛选。

基本上这个子查询应该为你做的是过滤掉所有引用数符合你的packName条件的作者。我承认我没有测试这个查询。如果你说这不适合你,我会解决问题并自己测试。

+0

你能举个例子吗? – xonegirlz 2013-04-05 08:29:12

+0

你能先详细解释一下你想做的事情吗?你的问题非常简单,但我想了解你正在解决的整个问题。 – svena 2013-04-05 08:34:15

+0

试图让所有具有引号的作者,其中每个引用对象都在allowedPackName数组中具有packName的包。 – xonegirlz 2013-04-05 08:49:52