2014-12-08 57 views
0

我最近开始使用Parse SDK for iOS用户注册/登录。我遵循Parse官方文档中提供的教程,并且一切正常。PFQuery在不使用委托的情况下返回数据后调用方法

但是,现在我试图自定义一些查询。我希望在我从另一个表中收到一些数据后执行一个操作。对于这一点,我使用:

[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

那么你想要返回状态布尔值?这是问题吗? – 2014-12-08 05:48:41

+0

是的,我想返回一个由PFQuery调用确定的布尔值。 – 2014-12-08 05:55:06

+0

看看这个答案:http://stackoverflow.com/a/26607458/2274694 – 2014-12-08 06:29:49

回答

0

我可以让这个东西起作用的唯一方法就是使用回调函数,正如评论文章中提到的那样。这不是我正在寻找的理想解决方案,但我想这是必须要做的。我将这个问题标记为封闭。

相关问题