PFQuery在不使用委托的情况下返回数据后调用方法

时间:2014-12-08 05:39:33

标签: ios multithreading pfquery

我最近开始研究用于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的返回值,并且稍后会更新正确的状态值。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我能让这件事发挥作用的唯一方法就是使用回调,如评论中的帖子所述。这不是我想要的理想解决方案,但我想这将是必须的。我将此问题标记为已关闭。