Этот код загрузит вам все PFUser
сек, в котором username
равно name
параметра:
- (void)searchUsersNamed:(NSString *)name withCompletion:(void (^)(NSArray *users))completionBlock {
PFQuery *query = [PFUser query];
[query whereKey:@"username" equalTo:name];
[query findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
// we found users with that username
// run the completion block with the users.
// making sure the completion block exists
if (completionBlock) {
completionBlock(users);
}
} else {
// log details of the failure
NSLog(@"Error: %@ %@", error, [error description]);
}
}];
}
пример, если вам необходимо обновить пользовательский интерфейс с результатом, например, таблицы:
- (void)someMethod {
// we will grab a weak reference of self to perform
// work inside the completion block
__weak ThisViewController *weakSelf = self;
//replace ThisViewController with the correct self class
[self searchUsersNamed:@"Phillipp" withCompletion:^(NSArray *users) {
//perform non-UI related logic here.
//set the found users inside the array used by the
//tableView datasource. again, just an example.
weakSelf.users = users;
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//pefrorm any UI updates only
//for example, update a table
[weakSelf.tableView reloadData];
}];
}];
}
Небольшое примечание: завершение Блокировка здесь не будет выполняться, если есть ошибка, но она будет работать, даже если пользователей не было найдено, поэтому вы должны это обработать (при необходимости. в этом примере это не было необходимо).
Избегайте использования логики, не связанной с UI, с помощью этого метода mainQueue, вы можете заблокировать основной поток и это плохой пользовательский интерфейс.