thế nào là mã câu trả lời Guy của bất kỳ khác biệt so với các câu hỏi? Theo như tôi có thể đoán, phương thức filterContentForSearchText: scope được gọi bởi các phương thức shouldReload?
Dù sao, đây là một số mã tương tự mà tôi đã thêm vào trong mẫu CoreDataBooks để bao gồm tìm kiếm. Thêm một bộ điều khiển hiển thị tìm kiếm trong IB cho ví dụ CoreDataBooks. Sau đó, tôi đã thêm mã vào RootViewController.m như sau:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
NSInteger searchOption = controller.searchBar.selectedScopeButtonIndex;
return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption];
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
NSString* searchString = controller.searchBar.text;
return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption];
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString*)searchString searchScope:(NSInteger)searchOption {
NSPredicate *predicate = nil;
if ([searchString length])
if (searchOption == 0) // full text, in my implementation. Other scope button titles are "Author", "Title"
predicate = [NSPredicate predicateWithFormat:@"title contains[cd] %@ OR author contains[cd] %@", searchString, searchString];
else
// docs say keys are case insensitive, but apparently not so.
predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", [[controller.searchBar.scopeButtonTitles objectAtIndex:searchOption] lowercaseString], searchString];
[fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return YES;
}
PS. Để trả lời Vivas, sử dụng UISearchDisplayController, nó sẽ tự động tạo ra một khung nhìn bảng mới để chồng lên danh sách được lọc. Bạn có thể kiểm tra xem tableView nào đang được sử dụng như trong tài liệu, nhưng trong thiết lập đơn giản nhất nó chỉ hoạt động vì fetchedResultsController hiển thị phiên bản đã lọc trong khung nhìn của bảng tìm kiếm hoặc hiển thị tất cả dữ liệu trong dạng xem bảng của bạn.
Nguồn
2009-11-18 04:52:03
Bạn đã xử lý các phương pháp nguồn dữ liệu chế độ xem bảng như thế nào để chế độ xem bảng sẽ Biết có hiển thị 'danh sách được lọc' hay không? – CraigH
Câu trả lời ở đây rất hữu ích http://stackoverflow.com/questions/4471289/how-to-filter-nsfetchedresultscontroller-coredata-with-uisearchdisplaycontroll/4481896#4481896 – acecapades
Đây là những gì tôi đã làm: http: // stackoverflow .com/questions/4471289/how-to-filter-nsfetchedresultscontroller-coredata-with-uisearchdisplaycontrolle/4856118 # 4856118 –