2013-05-10 130 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