У меня есть класс, который расширяет PFQueryTableViewController. В этом классе implementation of queryForTable(), я пытаюсь получить некоторые данные, чтобы добавить для построения запроса, используя findObjectsInBackgroundWithBlock
. Проблема в том, что поскольку findObjectsInBackgroundWithBlock
является асинхронным, как использовать данные, которые я получаю от findObjectsInBackgroundWithBlock
, и использовать его для построения query
ниже и сделать return query
.Как использовать findObjectsInBackgroundWithBlock в queryTable() класса PFQueryTableViewController
Мой код и ошибка показаны ниже.
override func queryForTable() -> PFQuery {
let query = PFUser.query()
//let query = PFQuery(className: "Room")
query?.whereKey("objectId", notEqualTo: PFUser.currentUser()!.objectId!)
//Showing OnlineUsers only
let onlineUsersQuery = PFQuery(className: "OnlineUsers")
onlineUsersQuery.whereKey("user", equalTo: PFUser.currentUser()!)
onlineUsersQuery.findObjectsInBackgroundWithBlock({ (results:[AnyObject]?, error:NSError?) -> Void in
let usersOnlineNow = results as! [PFObject]
for user in usersOnlineNow {
self.mLog.printToLog("Select only users who are in the OnLineUsers column")
query?.whereKey("objectId", equalTo: PFUser.currentUser()!.objectId!)
//query?.whereKey("objectId", equalTo: "noone")
if self.searchInProgress {
query!.whereKey("username", containsString: self.searchString)
}
if self.objects!.count == 0 {
//https://groups.google.com/forum/#!topic/parse-developers/7O9YCHNbuEo
query!.cachePolicy = PFCachePolicy.CacheThenNetwork //kPFCachePolicyCacheThenNetwork
//query.cachePolicy = kPFCachePolicyCacheThenNetwork
}
query!.orderByAscending("username")
return query!
}
})
// query!.orderByAscending("username")
//
// return query!
}
Может быть множество решений. Я бы создал запрос на завершение colsure и вызвал запрос «прямо там». Если он слишком сложный, установите переменную экземпляра PFQuery и обновите ее в завершении закрытия. Добавить свойство observer в свойство запроса и вызвать то, что вам нужно в didSet {} – kandelvijaya