объект count Parse Swift + tableView Section

Я новичок в Parse, поэтому я придерживаюсь руководства для разработчиков и основных функций. К сожалению, кажется, что в документации есть по крайней мере одна ошибка, касающаяся функции countObjectsInBackgroundWithBlock. Вот моя функция

var categoryCount: [Int] = []

функция getNumberOfItemInCategory() {

    for category in categories {
        var query = PFQuery(className: "Amiibos")
        query.whereKey("category", equalTo: category)
        query.countObjectsInBackgroundWithBlock { (count, error) -> Void in
            if error == nil {
                var result = Int(count)
                println("there is \(result) in \(category)")
 //               println( "TypeName0 = \(_stdlib_getDemangledTypeName(result))")
                self.categoryCount.append(result)
            }
        }

    }
    for toto in categoryCount {
        println("toto: \(toto)")
    }
    println("categoryCountFunc: \(self.categoryCount)")


}

Эта функция возвращает не Int, а Int32. Я пытался изменить возвращаемое значение с помощью return Int(count), но получаю сообщение об ошибке.

Затем я хотел бы использовать эту функцию в функции:

let categories = ["name1", "name2"]

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if categoryCount.isEmpty {
        return 0
    }
    else {
        return categoryCount[section]
    }
    }

Любая помощь будет очень признательна большое спасибо

[edit - add] Я добавил функцию для получения результата и обновления таблицы.

func makeRequest() {
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.getMyObjectsFromParse()
        self.getNumberOfItemInCategory()
        self.tableView.reloadData()           
    })

person robin.s    schedule 17.05.2015    source источник


Ответы (1)


countObjectsInBackgroundWithBlock возвращает void и принимает параметр блока, который также возвращает void.

В основе проблемы с размещенным кодом лежит идея асинхронного вычисления счетчика в методе источника данных, который требует немедленного результата.

Лучший дизайн состоит в том, чтобы просто получить данные для каждого раздела заранее, поместить результат в массив источника данных и перезагрузить таблицу. Затем numberOfRowsInSection может делать то, для чего предназначался, и просто возвращать счетчик массива.

person danh    schedule 17.05.2015
comment
Спасибо, что указали мне правильное направление! Я смог создать переменную, добавив в нее результат. Ну типа. Не знаю, почему, когда я печатаю результат, он отображается без проблем и в виде целого числа. Но когда я пытаюсь добавить .append к моему массиву переменных, он, похоже, не работает. я отредактировал свой первый пост - person robin.s; 18.05.2015