为什么不能两次获取相同的数据? NSFetchedResultsController为空

时间:2012-11-23 00:05:57

标签: objective-c core-data xcode4.3 nsfetchedresultscontroller

我正在尝试获取数据,但结果是空的!
首先,我有一个表,其中包含来自一个NSFetchedResultsController的数据。在此之前,我的代码是正确的,而且我知道我有数据。
但是,我过滤了那个NSFetchedResultsController,所以我需要另一个带有过滤器的NSFetchedResultsController,我的意思是,我的所有记录。所以,我试图用另一个NSFetchedResultsController再次获取数据,使用相同的代码,但结果总是空的!
这是我正在使用的功能:

+(NSFetchedResultsController*)fetchedResultsControllerForEntity:(NSString*)entityName titleKey:(NSString*)titleKey sectionNameKeyPath:(NSString*)sectionNameKeyPath{

      NSFetchRequest *request=[self fetchRequestForEntity:entityName titleKey:titleKey sectionNameKeyPath:sectionNameKeyPath];    

      return [[[NSFetchedResultsController alloc] initWithFetchRequest:request 
                                            managedObjectContext:[self managedContext] 
                                            sectionNameKeyPath:sectionNameKeyPath 
                                            cacheName:[NSString stringWithFormat:@"%@.%@.%@",entityName,sectionNameKeyPath,titleKey]]autorelease];
 }



+(NSFetchRequest *) fetchRequestForEntity:(NSString*)entityName titleKey:(NSString*)titleKey sectionNameKeyPath:(NSString*)sectionNameKeyPath{

    NSFetchRequest *request=[[[NSFetchRequest alloc]init]autorelease];
    request.entity=[NSEntityDescription entityForName:entityName inManagedObjectContext:[self managedContext]];
    NSSortDescriptor* titleSortDescriptor=titleKey?[[NSSortDescriptor alloc ]initWithKey:titleKey ascending:YES]:nil;
    NSSortDescriptor* sectionSortDescriptor=sectionNameKeyPath?[[NSSortDescriptor alloc ]initWithKey:sectionNameKeyPath ascending:YES]:nil;
    NSMutableArray * sortDescriptors=[[NSMutableArray alloc]init];
    if(sectionNameKeyPath){
        [sortDescriptors addObject:sectionSortDescriptor];
        [sectionSortDescriptor release];
    }
    if(titleKey){
        [sortDescriptors addObject:titleSortDescriptor];
        [titleSortDescriptor release];
    }

    request.sortDescriptors=sortDescriptors;
    [sortDescriptors release];

    request.fetchBatchSize=20;
    return request;
}

我不明白,为什么如果我使用相同的代码,我的NSFetchResultsController是空的!
我试图从另一个实体获取数据,但结果也是空的...
我为什么失踪?
感谢

2 个答案:

答案 0 :(得分:0)

只需使用相同的NSFetchedResultsController即可。只需更改其fetchRequest属性即可反映您要提取的数据。例如,要获取给定实体的所有实例,请使用

self.fetchedResultsController.fetchRequest.predicate = nil;
[self.fetchedResultsController performFetch:&error]; 

如果您NSFetchedResultsControllerDelegate设置正确,您的表格视图应该只是更新。

答案 1 :(得分:0)

我已经解决了我的问题。只需重新声明NSFetchedResultsController对象的SET方法:

-(void)setFetchedItems:(NSFetchedResultsController *)newFetchedItems{
    [fetchedItems release];
    fetchedItems=[newFetchedItems retain];
    [fetchedItems performFetch:NULL];
}

我猜这就是为什么我的对象总是空的。因为对象