uisearchbar в сгруппированном разделе
Я собрал несколько учебных пособий для создания сгруппированной таблицы с разделами, и теперь я пытаюсь заставить работать панель uisearch. проблема у меня заключается в том, как искать в сгруппированных разделах.
Я прочитал похожие вопросы, предложенные в этом посте, но не могу
Это код для создания сгруппированных разделов
#import "Job.h" // A model for the data
#import "Address.h" // Another model for the data
- (void)viewDidLoad
{
[super viewDidLoad];
self.theTable.delegate = self;
self.theTable.dataSource =self;
_searchBar.delegate = (id)self;
FMDBDataAccess *db = [[FMDBDataAccess alloc] init];
jobs = [[NSMutableArray alloc] init];
jobs = [db getJobs:1];
_sections = [[NSMutableDictionary alloc] init];
NSMutableArray *jobsTempArray = [db getJobsAsDictionary:1];
BOOL found;
// Loop through the books and create our keys
for (NSDictionary *book in jobsTempArray)
{
NSString *cLong = [book objectForKey:@"addrAddress"];
NSString *c = [cLong substringToIndex:1];
found = NO;
for (NSString *str in [_sections allKeys])
{
if ([str isEqualToString:c])
{
found = YES;
}
}
if (!found)
{
[_sections setValue:[[NSMutableArray alloc] init] forKey:c];
}
}
// Loop again and sort the books into their respective keys
for (NSDictionary *book in jobsTempArray)
{
[[_sections objectForKey:[[book objectForKey:@"addrAddress"] substringToIndex:1]] addObject:book];
}
// Sort each section array
for (NSString *key in [_sections allKeys])
{
[[_sections objectForKey:key] sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"addrAddress" ascending:YES]]];
}
}
И это код, который ищет
-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
if(text.length == 0)
{
_isFiltered = FALSE;
}
else
{
_isFiltered = true;
_filteredjobs = [[NSMutableArray alloc] init];
//for (Job* book in jobs)
//for (Job* book in [_sections allKeys])
//for (NSString *food in [_sections allKeys])
for (NSDictionary* book in [_sections allKeys])
{
NSString *addrStr = [book objectForKey:@"addrAddress"];
NSString *postStr = [book objectForKey:@"addrPostcode"];
//NSRange nameRange = [book.jobAddress rangeOfString:text options:NSCaseInsensitiveSearch];
NSRange nameRange = [addrStr rangeOfString:text options:NSCaseInsensitiveSearch];
//NSRange descriptionRange = [book.jobPostcode rangeOfString:text options:NSCaseInsensitiveSearch];
NSRange descriptionRange = [postStr rangeOfString:text options:NSCaseInsensitiveSearch];
if(nameRange.location != NSNotFound || descriptionRange.location != NSNotFound)
{
[_filteredjobs addObject:book];
}
}
}
[self.theTable reloadData];
}
Я понял, что мне нужно изменить for (Job* food in jobs)
в for (NSDictionary* book in [_sections allKeys])
но я застрял, как искать в [_sections allKeys]
Именно эта линия
NSRange nameRange = [addrStr rangeOfString:text options:NSCaseInsensitiveSearch];
который падает с
-[__NSCFString objectForKey:]: нераспознанный селектор отправлен на экземпляр 0x692e200
*** Завершение работы приложения из-за невыполненной исключительной ситуации NSInvalidArgumentException, причина: '-[__NSCFString objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x692e200':
Есть идеи? PS Относись ко мне как к новичку, мне понадобится немного кода и объяснений - я все еще изучаю obj-c
2 ответа
Я нашел ответ в UISearchBar - поиск NSDictionary массивов объектов и чтение на всех клавишах.
В основном перебираем сгруппированный NSDictionary и извлекаем NSArrays, затем снова перебираем поиск...
-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
if(text.length == 0)
{
_isFiltered = FALSE;
}
else
{
_isFiltered = true;
_filteredjobs = [[NSMutableArray alloc] init];
NSString *currentLetter = [[NSString alloc] init];
for (int i=0; i<[_sections count]; i++)
{
currentLetter = [[_sections allKeys] objectAtIndex:i];
NSArray *jobsForKey = [ [NSArray alloc] initWithArray:[_sections objectForKey:[[_sections allKeys] objectAtIndex:i]] ];
for (int j=0; j<[jobsForKey count]; j++)
{
NSDictionary *book = [jobsForKey objectAtIndex:j];
NSRange titleResultsRange = [[book objectForKey:@"addrAddress"] rangeOfString:text options:NSCaseInsensitiveSearch];
if(titleResultsRange.location != NSNotFound)
{
[_filteredjobs addObject:book];
}
}
}
}
[self.theTable reloadData];
}
Проверьте ссылку. Он показывает UISearchBar с сгруппированным разделом Tableview. Это простое руководство. Надеюсь, что это полезно для вас