У меня есть приложение, которое содержит табличный вид. В представлении таблицы отображаются данные, извлеченные из Parse. Чтобы получить количество строк, в которых я хочу, чтобы TableView был заполнен, я запрашиваю синтаксический анализ.Извлечение переменной из внешнего блока завершения Parse Swift
var activeGamesCurrentUser = 0
gamesQuery.countObjectsInBackgroundWithBlock({
(count, error) -> Void in
let countedInt = Int(UInt32(count))
self.activeGamesCurrentUser = countedInt
})
Но, когда я пытаюсь вернуться activeGamesCurrentUser для числа строк, всегда 0, так как переменная не обновляется вне блока завершения. Если я печатаю «countedInt» внутри блока, это число больше 0.
Я не хочу, чтобы решить эту проблему так:
var count = gamesQuery.countObjects()
activeGamesCurrentUser = count
Причина этого в том, что «countObjects () "является синхронным и будет продолжать работать на переднем плане навсегда. Любая помощь по этому вопросу будет оценена по достоинству.
Edit:
Вот полный метод:
var activeGamesCurrentUser = 0
func getRowNumber() {
if PFUser.currentUser() != nil && finished == true {
currentUserObjectId = PFUser.currentUser()?.objectId
let currentUser = PFUser.currentUser()
let challengedQuery = PFQuery(className: "Games")
challengedQuery.whereKey("challenged", equalTo: currentUserObjectId)
let challengerQuery = PFQuery(className: "Games")
challengerQuery.whereKey("challenger", equalTo: (currentUser?.objectId)!)
let gamesQuery = PFQuery.orQueryWithSubqueries([challengedQuery, challengerQuery])
gamesQuery.countObjectsInBackgroundWithBlock({
(count, error) -> Void in
let countedInt = Int(UInt32(count))
self.activeGamesCurrentUser = countedInt
})
}
override func viewDidLoad() {
super.viewDidLoad()
getRowNumber()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return activeGamesCurrentUser
}
После загрузки данных таблицы в фоновом режиме, вам нужно вызвать 'tableView.reloadData()' для того, чтобы рассказать TableView, что данные изменились – Paulw11
я называю tableView.reloadData() уже. Моя проблема заключается не в получении данных для заполнения строк, а в определении количества строк, которые должны иметь табличные представления. Я не могу найти способ получить переменную «activeGamesCurrentUser» из блока завершения, если ее значение не вернется к 0. @ Paulw11 –
Этот код установит свойство. Когда вы пытаетесь получить доступ к его значению в связи с этим закрытием? то есть. Как код знает, что печатает значение, знаете, что закрытие завершено? – Paulw11