我最近开始研究用于iOS用户注册/登录的Parse SDK。我遵循Parse官方文档中提供的教程,一切都很好。
但是,现在我正在尝试自定义一些查询。我希望在从另一个表中收到一些数据后进行操作。为此,我正在使用:
[PFQuery findObjectsInBackgroundWithBlock^(BOOL return, NSError *error)].
当这个块成功执行时,在块内,我调用我的委托方法,如下所示:
PFQuery *query = [PFQuery queryWithClassName:@"Requests"];
[query whereKey:kUserEmail equalTo:[dataDict objectForKey:kUserEmail]];
__block NSString *status = nil;
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
// The find succeeded.
// Do something with the found objects
for (PFObject *object in objects) {
NSLog(@"%@", object.objectId);
status = object[@"status"];
if([del respondsToSelector:@selector(redirectToMyMethod:)])
{
[del redirectToMyMethod:status];
}
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
我想知道是否有其他方法可以实现上述功能?我不能以某种方式让我的程序等到这些返回被提取后?到目前为止,如果我在没有委托的情况下尝试这个,我的程序向前移动时返回值不正确,这个PFQuery对象的结果将在以后获取。我想做这样的事情:
+ (BOOL) isUserInRequest{
PFQuery *query = [PFQuery queryWithClassName:@"Requests"];
[query whereKey:kUserEmail equalTo:[PFUser currentUser].username];
__block BOOL status = NO;
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error)
{
if([objects count] > 0)
{
status = YES;
}
}
}];
return status;
}
但正如您所看到的,我总是得到NO的返回值,并且稍后会更新正确的状态值。有人可以帮我吗?
答案 0 :(得分:0)
我能让这件事发挥作用的唯一方法就是使用回调,如评论中的帖子所述。这不是我想要的理想解决方案,但我想这将是必须的。我将此问题标记为已关闭。