UISearchBar Фильтровать данные из Firebase Query - PullRequest
0 голосов
/ 23 октября 2018

Привет всем, я пытаюсь отфильтровать поиск своих пользователей с помощью UISearchBar .. Список моих пользователей находится в RealTimeDatabase Firebase ..

Способ, которым я показывал пользователей в tableviewcontroller, был:

  1. Сделайте запрос для получения данных
  2. Я создал свой собственный NSObject класс (называемый "пользователь" ) для управления данными иотобразить в контроллере таблицы ..

Теперь моя проблема в том, что я не могу понять, как реализовать функцию фильтрации этих данных, если пользователь использует UISearchBar, может кто-нибудь из вас помочь мне решить эту проблемупроблема?

В Нижнем я покажу вам запрос данных из базы данных и способ, которым я реализовывал фильтр панели поиска. Конечно, я ошибаюсь в способе фильтрации данных, и я не могу понять, где я 'м неправильно .. я пробовал много способов но не могу решить ...

@interface UserSearchViewController ()  <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) NSMutableArray *users;
@property (nonatomic, strong) NSMutableArray *filteredUsers;
@property (nonatomic, assign) BOOL isFiltered;
@property (nonatomic, strong) UserHandler *user;

- (void)viewDidLoad {
    [super viewDidLoad];

    /// Prepariamo la MutableArray che contiene i dati degli user
    _users = NSMutableArray.new;
    _searchBar.delegate = self;

    [self setupTableView];
    [self retrieveAllUser];
}

#pragma mark - Search Bar Filter Data

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    [self filteredContent:searchText];
    [self.tableView reloadData];
}

-(void)filteredContent:(NSString *)searchText {
    if (searchText.length == 0) _isFiltered = NO;

    else {
        _isFiltered = YES;
        _filteredUsers = NSMutableArray.new;

        for (NSString *str in self.users) {

            NSRange range = [self.user.name rangeOfString:searchText options:NSCaseInsensitiveSearch];

            if (range.location != NSNotFound) [self.filteredUsers addObject:str];
        }
    }
}

#pragma mark - User Query

-(void)retrieveAllUser {
    /// Creiamo una referenza al Database di Firebase
    FIRDatabaseReference *dbRef = FIRDatabase.database.reference;

    /// Effettuiamo la query
    [[[dbRef child:kUserAccFolder] queryOrderedByChild:kUserAccEmail] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {

        NSDictionary *dict = snapshot.value;

        if (dict) {

            self.user = UserHandler.new;

            self.user.name = dict[kUserAccName];
            self.user.university = dict [kUserAccUniversity];
            self.user.photoProfileURL = dict [kUserAccUrlImage];
            self.user.userID = snapshot.key;

            [self.users addObject:self.user];
        }

        [self.tableView reloadData];
    }];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_isFiltered) return self.filteredUsers.count;
    return self.users.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UserSearchCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath];

    self.user = _isFiltered ? self.filteredUsers[indexPath.row] : self.users[indexPath.row];
    cell.name.text = self.user.name;

    return cell;
}
...