我有以下代码,它将用户列表从Parse加载到一个名为user的数组中:
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];
}];但是,如果我试图在结束时将用户叫出关闭括号,那就是零。有人知道会导致这种情况的原因吗?2)如何将值放入可以在结束括号外访问的数组中?
发布于 2015-01-05 07:37:09
1) findObjectsInBackgroundWithBlock在后台检索对象,这意味着它是异步发生的--该方法在其他进程运行时运行,而不是按顺序运行。因此,假设您有您当前的代码:
Note I会在处理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关键字。
发布于 2015-01-05 07:41:42
接受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 ...https://stackoverflow.com/questions/27771968
复制相似问题