PFQuery 数组问题

PFQuery Array Issue

我有以下代码将用户列表从 Parse 加载到名为用户的数组中:

PFUser *currentUser = [PFUser currentUser];
NSString *currentUserUni = currentUser[@"university"];

//Parse Query
//-------------------------------------------
PFQuery *query = [PFQuery queryWithClassName:@"_User"];
[query whereKey:@"university" equalTo:currentUserUni];
[query setLimit:50];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        [users removeAllObjects];
        [users addObjectsFromArray:objects];



}];

但是,如果我尝试呼叫最后那个右括号之外的用户,则为零。有人知道吗 1)是什么原因造成的? 和 2) 如何将值放入可以在右括号外访问的数组中?

1) findObjectsInBackgroundWithBlock 在后台检索对象,这意味着它是异步发生的 - 该方法在其他进程运行时运行 运行 而不是顺序运行。所以说你有你当前的代码:

注意 我会在弄乱您的 users 数组之前提供错误检查。

PFQuery *query = [PFQuery queryWithClassName:@"_User"];
[query whereKey:@"university" equalTo:currentUserUni];
[query setLimit:50];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        [users removeAllObjects];
        [users addObjectsFromArray:objects];
    } else {
      // show your alert message
    }
}];


... some code that comes after the block ...

当您搜索背景...

2) 要解决您的问题,需要做的是将 __block 关键字添加到 users 数组中。

此处引用了堆栈溢出中的答案,进一步解释了 __block 关键字。

__block keyword

采用 jsetting32 答案并进行更改

我认为你应该将 removeAllObjects 排除在循环之外

[users removeAllObjects];
PFQuery *query = [PFQuery queryWithClassName:@"_User"];
[query whereKey:@"university" equalTo:currentUserUni];
[query setLimit:50];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {

    [users addObjectsFromArray:objects];
} else {
  // show your alert message
}
}];


... some code that comes after the block ...