Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

EliasRahme

macrumors newbie
Original poster
Jul 18, 2012
7
0
Hy all, i have developed an application that searches a table view connected to a sqlite database. A search Bar is added onto of the application and the search is working fine, but when i type, i need only the items STARTING by the letter typed appear. This is my code till now :
Code:
-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
    if(text.length == 0)
    {
        isFiltered = FALSE;
    }
    else
    {
        isFiltered = true;
        filteredTableData = [[NSMutableArray alloc] init];

        for (Author* author in theauthors)
        {  //[NSPredicate predicateWithFormat:@"SELECT * from books where title LIKE %@", searchBar.text];
            NSRange nameRange = [author.name rangeOfString:text options:NSCaseInsensitiveSearch];
            NSRange descriptionRange = [author.genre rangeOfString:text options:NSCaseInsensitiveSearch];
            if(nameRange.location != NSNotFound || descriptionRange.location != NSNotFound)
            {
                [filteredTableData addObject:author];
            }
        }
    }

    [self.tableView reloadData];
}
 
Last edited:
The issue seems to be how you're doing your comparisons of the find string and your author.name. If you want the search to be anchored to the start of the author.name then you need to use a different comparison method. You could use one of the compare methods that takes a range or use the NSAnchoredSearch option, or hasPrefix (although that's probably not case insensitive). There are probably other options as well. It's just a matter of how you do your comparisons.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.