Попытка открыть UIAlert, если мой предикат поиска возвращает ноль - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь выдать предупреждение «Нет записей найдено», если пользователь выполняет поиск, а предикат возвращает ноль.

Я пытался это сделать, но предупреждение никогда не вызывалось.Я просто получаю пустую таблицу.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {

    if (self.sBar.text != nil){

        NSPredicate *template = [NSPredicate predicateWithFormat:@"name contains[cd] $SEARCH OR optionOne contains[cd] $SEARCH OR optionTwo contains[cd] $SEARCH"];
        NSDictionary *replace = [NSDictionary dictionaryWithObject:self.sBar.text forKey:@"SEARCH"];
        NSPredicate *predicate = [template predicateWithSubstitutionVariables:replace];

        [fetchedResultsController.fetchRequest setPredicate:predicate];

    }

    [[fetchedResultsController fetchedObjects] count];

    if (fetchedResultsController.fetchedObjects != nil) {

        //do nothing

    } else {

        //display alert
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"No records match." 
                                                           delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];

    }

    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error]) {

        // Handle error
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();  // Fail
    }           

    [self.myTable reloadData];

    [sBar resignFirstResponder];  

}

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Ха-ха! Понял ...

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {

    if (self.sBar.text != nil) {

        NSPredicate *template = [NSPredicate predicateWithFormat:@"name contains[cd] $SEARCH OR optionOne contains[cd] $SEARCH OR optionTwo contains[cd] $SEARCH"];
        NSDictionary *replace = [NSDictionary dictionaryWithObject:self.sBar.text forKey:@"SEARCH"];
        NSPredicate *predicate = [template predicateWithSubstitutionVariables:replace];

        [fetchedResultsController.fetchRequest setPredicate:predicate];

    }

    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error]) {

        // Handle error
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    } 

    if ([[fetchedResultsController fetchedObjects] count] != 0)  {

        [self.myTable reloadData];
        [sBar resignFirstResponder];  

    }
    else {

        //display alert
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"No records match." 
                                                           delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];

    }   
}
0 голосов
/ 18 июня 2011

Предикат не имеет -count.Предикат - это выражение, которое оценивается как true или false.Вот и все.

Вы можете запросить у NSFetchedResultsController его -fetchedObjects (который возвращает массив), а затем запросить у этого массива -count, но вы можете сделать это только после вызова -performFetch:.

...