2014-12-08 89 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

我可以讓這個東西起作用的唯一方法就是使用回調函數,正如評論文章中提到的那樣。這不是我正在尋找的理想解決方案,但我想這是必須要做的。我將這個問題標記爲封閉。

相關問題