2015-02-23 98 views
0

如何等待,直到從parse.com檢索到數據爲止?從parse.com檢索對象,並等待返回,直到檢索到數據

這是我返回一個空字符串的函數,因爲parse.com的響應太慢了。如果我在成功區域內放置一個斷點,那麼在需要數據之後它會中斷「很長」。我想有一種方法可以讓數據同步,所以它會等待?

func getObjectId(localPersonId:NSString) -> NSString{ 
    var currentObjectId:NSString = "" 

    var query = PFQuery(className:"myClass") 
    query.whereKey("personId", equalTo:localPersonId) 
    query.whereKey("groupId", equalTo:self.currentGroupId) 
    query.findObjectsInBackgroundWithBlock { 
     (objects: [AnyObject]!, error: NSError!) -> Void in 
     if error == nil { 
      // should not use a for loop since this should 
      // only return one row 
      for object in objects { 
       currentObjectId = object["objectId"] as NSString 
      } 
     } else { 
      // Log details of the failure 
      NSLog("Error: %@ %@", error, error.userInfo!) 
     } 
    } 

    return currentObjectId 
} 

在這種情況下,getObjectId函數將返回一個空字符串。任何人?

+0

你需要讓你的'getObjectId function'異步的。在查詢完成之前,正在執行'return currentObjectId'行。 – ardrian 2015-02-23 13:45:06

+0

是的,這是問題所在。我如何使該功能異步? – TommyF 2015-02-23 14:35:30

+0

請看這裏http://stackoverflow.com/questions/25203556/returning-data-from-async-call-in-swift-function – danh 2015-02-23 15:50:11

回答

2

我意識到這是3個月大,但雖然解析文檔非常好/有用,但沒有很多答案IOS解析相關的問題。

這應該工作。它使用完成處理程序,這是處理此問題的簡單方法。

(關於完成處理的非同步方面:https://thatthinginswift.com/completion-handlers/

func getObjectId(localPersonId:NSString, completionHandler: (currentObjectId: [String]) ->()){ 

    var currentObjectId:NSString = "" 

    var query = PFQuery(className:"myClass") 
    query.whereKey("personId", equalTo:localPersonId) 
    //query.whereKey("groupId", equalTo:self.currentGroupId) 
    query.findObjectsInBackgroundWithBlock { 
     (objects, error) -> Void in 
     if error == nil { 
      // should not use a for loop since this should 
      // only return one row 
      for object in objects { 
       completionHandler(currentObjectId: currentObjectId) 
      } 
     } else { 
      // Log details of the failure 
      NSLog("Error: %@ %@", error!, error!.userInfo!) 
     } 
    } 
} 
+0

是的,因爲我有這個問題。我可能做了一個破解工作,因爲我沒有迴應,但我會看看我的舊代碼,看看。無論如何;很高興瞭解completionHandler :) – TommyF 2015-06-12 11:17:46