簡體   English   中英

在解析iOS中搜索1000多個查詢

[英]Search more than 1000 queries in parse iOS

我有一個解析的iOS應用程序,需要搜索幾千個用戶的名稱(約3,000個)。 我正在嘗試修改搜索代碼,以便可以執行此操作,但是我需要幫助。 現在,我的搜索代碼如下所示:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (tableView == self.tableView) {

        return self.objects.count;

    } else {
        return self.searchResults.count;

    }

}


-(void)filterResults:(NSString *)searchTerm :(int)limit :(int)skip {


    [self.searchResults removeAllObjects];

    PFQuery *query = [PFQuery queryWithClassName:@"_User"];
    [query whereKey:@"isTeacher" equalTo:@"False"];
    [query setLimit: limit];
    [query setSkip: skip];

    [[[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (objects.count == limit) {
            [self performTeacherQueryWithLimit:limit andSkip:skip+limit];
        }

        else{
        NSArray *results = [NSArray arrayWithArray:objects];

        NSLog(@"%@", results);
        NSLog(@"%lu", (unsigned long)results.count);
        NSLog(@"results^");


        [self.searchResults addObjectsFromArray:results];

        NSPredicate *searchPredicate =
        [NSPredicate predicateWithFormat:@"SELF.name contains[c] %@",searchTerm];
        _searchResults = [NSMutableArray arrayWithArray:[results filteredArrayUsingPredicate:searchPredicate]];
        [self.searchDisplayController.searchResultsTableView reloadData];

        NSLog(@"%@", _searchResults);
        NSLog(@"%lu", (unsigned long)_searchResults.count);
        NSLog(@"search results^");
        }

    }];
    ]]

}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    [self filterResults:searchString];
    return YES;
}

這段代碼不起作用,因為我在沒有所有正確參數的情況下在底部調用了filterResults,但這是因為我走了一半,現在被卡住了。 我知道我需要使用setSkip,但不確定如何使它適合我的搜索。 任何幫助都是極好的! 謝謝!

我使用一種可以一起處理查詢及其結果的方法來執行此類操作,如下所示:

- (void)runQuery:(PFQuery *)query filling:(NSMutableArray *)array completion:(void (^)(BOOL))completion {
    query.skip = array.count;
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            [array addObjectsFromArray:objects];
            if (objects.count < query.limit) {
                return completion(YES);
            } else {
                [self runQuery:query filling:array completion:completion];
            }
        } else {
            return completion(NO);
        }
    }];
}

像這樣使用它:

PFQuery *query = [PFQuery queryWithClassName:@"MyClass"];
// setup query
query.limit = // set this to a reasonable size
// the given method will do ceil(N / limit) finds, where N is the number
// of rows that satisfy the query

NSMutableArray *array = [@[] mutableCopy];
[self runQuery:query filling:array completion:^(BOOL success) {
    NSLog(@"%@", array);
    // you would do your local search and set search results here
}];

功能更強的版本將在查詢之間調用進度塊。 這將使您能夠不斷更新結果。 為此,只需添加一個進度塊參數,並在[array addObjectsFromArray:objects];之后立即調用它[array addObjectsFromArray:objects];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM