2013-05-10 131 views
0
- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"KeyRefEntity" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    [fetchRequest setFetchBatchSize:20]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:NO]; 
    NSArray *sortDescriptors = @[sortDescriptor]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"time" cacheName:@"Master"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    NSError *error = nil; 
    if (![self.fetchedResultsController performFetch:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return _fetchedResultsController; 
} 

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar { 
    if (self.searchBar.text !=nil) 
    { 
     NSPredicate *predicate =[NSPredicate predicateWithFormat:@"ref CONTAINS[cd] %@", self.searchBar.text]; 
     [self.fetchedResultsController.fetchRequest setPredicate:predicate]; 
    } 
    else 
    { 
     NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"]; 
     [self.fetchedResultsController.fetchRequest setPredicate:predicate]; 
    } 

    NSError *error = nil; 
    if (![[self fetchedResultsController] performFetch:&error]) 
    { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); 
    } 

    [self.searchBar resignFirstResponder]; 

    [self.tableView reloadData]; 
} 

我想使用此代码进行搜索,但里面searchBarSearchButtonClicked:代码不工作,我把一个破发点全部代码执行,但没有任何反应。为什么nspredicate不工作

+0

searchBarSearchButtonClicked方法是否正在调用? – Balu 2013-05-10 14:35:21

+0

@Sunny是它的调用,代理被设置,代码里面的代码全部执行没有错误,但表中没有变化 – 2013-05-10 14:43:53

回答

1

不知道[NSPredicate predicateWithFormat:@"All"];应该做什么,但它不太可能工作。当您的搜索文本更改时,应更换提取请求并将新的提取请求添加到FRC。从FRC文档:

initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:

重要:你不能调用此方法之后修改fetchRequest。例如,你不能改变它的谓词或排序顺序。

您的其他问题是FRC正在使用缓存。不支持在使​​用缓存时更改提取请求。一般建议是不使用缓存。如果由于某种原因必须使用缓存,那么当(更改)获取请求时,您还需要删除旧缓存- deleteCacheWithName:)

查看文档FRCs here