Core Data Search

XCode AppleOlvasó kérésére gyorsan összedobtam a Core Data kereső megoldást! Első lépésként vegyük elő a Core Data adatmentés cikk végén található forrást! Ha valakinek már megvan akkor csak át kell írni a részeket ,akinek nincs az töltse le !!!
Első lépés .h fájlnál delegáljuk a keresőt UISearchDisplayDelegate, UISearchBarDelegate majd hozzáadjuk a BOOL savedSearchTerm; és a @property (nonatomic, retain) NSMutableArray *searchResults;
@property (nonatomic, retain) NSIndexPath *indexP;
@property IBOutlet UISearchBar *kereso;//kereső eltüntetése, nem kötelező ez csak egy kis játék a nézettel!
Core Data Search 1
Mehetünk a .m fájlba ahol első lépésként #import “Lista.h” hozzáadása mert a kereső az ott lévő részekből fog keresni!!
Core Data Search 2
viewDidLoad:
self.searchResults = [NSMutableArray arrayWithCapacity:[[self.fetchedResultsController fetchedObjects] count]];
[self.tableView reloadData]
Most jön a plusz kiegészítő aki akarja beteheti:
CGRect newBounds = self.tableView.bounds;
newBounds.origin.y = newBounds.origin.y + kereso.bounds.size.height;
self.tableView.bounds = newBounds;

viewDidUnload:
self.searchResults = nil;

Mehetünk tovább ahol bővítjük a numberOfRowsInSection részt a keresővel:
Core Data Search 3
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [self.searchResults count];
}
else {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
}
A cellForRowAtIndexPath: részt is át kell írni a következőre ami miatt adtuk hozzá az elején a import Lista fájlt !
Core Data Search 4
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@”Cell”];

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@”Cell”];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
Lista *lista = nil;
if (tableView == self.searchDisplayController.searchResultsTableView)
{
lista = [self.searchResults objectAtIndex:indexPath.row];
}
else
{
lista = [self.fetchedResultsController objectAtIndexPath:indexPath];
}
cell.textLabel.text = lista.nev;
cell.detailTextLabel.text = lista.leiras;
return cell;
}
Most jönnek a kereső részhez tartozó kódrészek!
Core Data Search 5
– (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString scope:@”All”];
savedSearchTerm = TRUE;
return YES;
}
– (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:@”All”];
savedSearchTerm = TRUE;
return YES;
}
-(void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
savedSearchTerm = TRUE;
}
#pragma mark –
#pragma mark Content Filtering
– (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
[self.searchResults removeAllObjects];
NSLog(@”kereső text: %@”, searchText);
for (Lista *nevek in [self.fetchedResultsController fetchedObjects])
{
if ([scope isEqualToString:@”All”] || [nevek.nev isEqualToString:scope])
{
NSComparisonResult result = [nevek.nev compare:searchText
options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.searchResults addObject:nevek];
}
}
}
}
Már csak a didSelectRowAtIndexPath rész van vissza meg a Segue és kész is vagyunk vele !
Tehát akkor didSelectRowAtIndexPath hozzáadjuk:
if (savedSearchTerm) {
indexP = indexPath;
[self performSegueWithIdentifier:@”mehetaDetail” sender:self];
}
Core Data Search 6

Segue:
Core Data Search 7
if ([[segue identifier] isEqualToString:@”mehetaDetail”]) {
if (savedSearchTerm) {
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexP];
[[segue destinationViewController] setDetailItem:object];
} else {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
[[segue destinationViewController] setDetailItem:object];
}
}
Ezzel kész is az összes kódrész, most már csak a Storyborad szerkesztőben kell hozzáadni a kereső modult ( a bővített verzió ami sárgával van megjelölve )és aki a cikk elején hozzáadta a kereső eltüntetését az kösse össze a kereső modullal !
Core Data Search 8
A szimulációnál látni fogjátok, hogy a kereső nem látszik csak ha lehúzod a táblát !!
Ennyi volt a Core Data Searc megoldása !!
Következő cikk a IOS6 újdonságok 2. rész lesz ahol az új keresőt mutatom be és a már bemutatott refresh-t !

Reklámok

3 hozzászólás

Kategória: Források

3 responses to “Core Data Search

    • Robi

      Szia. Kellene egy kis segítség.

      Beírtam a kódokat de valamiért ha a keresőben rákeresek egy betűre mondjuk az “a” akkor nem az “a” betűt jeleníti meg a detail nézetben hanem amit utoljára beírtam mondjuk a “d” betűt.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google kép

Hozzászólhat a Google felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s