Я пытаюсь только вызвать функцию только, если я извлек определенный PFObject
из моего внутреннего блока Parse в отдельной функции. На данный момент я вызываю эту вторую функцию после заданной задержки 3.0
, и она работает, но только если первая функция запроса вызывается в пределах 3.0
, в противном случае у меня должно быть pullToRefresh
tableView
после того, как первая функция в конечном итоге будет завершена для ее заполнения с данными анализа. (Я использую PFQueryTableViewController
кстати)Как вызвать функцию только в том случае, если другая функция завершена? (Swift и retrieve from Parse)
Вот мой код на данный момент (я знаю, queryForTable
является переопределением, так что вызывается независимо, так есть способ изменить это на нормальный func?):
override func viewDidLoad() {
// ideally want something like "if getX'IsComplete' then queryForTable() and self.loadObjects()"
retrieveFirstX()
let delay = 3.0 * Double(NSEC_PER_SEC) // retrieveFirstX must load within 3.0 for table to populate without needing to pullToRefresh
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
self.queryForTable()
self.loadObjects()
})
}
var X = PFObject(className: "X")
func retrieveFirstX() -> Bool {
let xQuery = PFQuery(className: "X")
xQuery.orderByDescending("createdAt")
xQuery.getFirstObjectInBackgroundWithBlock {
(object: PFObject?, error: NSError?) -> Void in
if error == nil {
self.X = object!
}
}
return true
}
override func queryForTable() -> PFQuery {
let xRelation = X.relationForKey("xPosts") as PFRelation!
let relationQuery = xRelation.query()
let xPostsQuery = PFQuery(className: "Posts")
xPostsQuery.includeKey("postUser")
xPostsQuery.whereKey("objectId", matchesKey: "objectId", inQuery: relationQuery)
xPostsQuery.cachePolicy = .NetworkElseCache
xPostsQuery.orderByDescending("createdAt")
return xPostsQuery
}
Нужно ли использовать обработчики завершения, и если да, то как мне это сделать, поскольку я никогда не использовал их раньше?
Заранее благодарен!
Это сработало! Благодаря! - Кстати, queryForTable() теперь вызывается дважды, и я предполагаю, что он вызывается в viewDidLoad() и с ним является переопределяющим func. Знаете ли вы, что можно сделать queryForTable() не переопределяющим func так, что он вызывается только один раз при открытии приложения? –
Я не знаю, но вы можете поставить точку останова в этой функции и каждый раз смотреть на трассировку стека, чтобы увидеть, откуда она вызывается. –