2016-08-25 3 views
0

Я пытаюсь подсчитать количество найденных объектов в PFQueryTableViewController.Подсчет найденных объектов в PFTableQueryViewController

Я попытался работать вокруг с

override func queryForTable() -> PFQuery { 
    let query = PFQuery(className: self.parseClassName!) 
    query.whereKey("member", equalTo: memberId!) 

    let count = query.countObjectsInBackground() 
    label.text = "\(count)" 


    return query 

} 

Но мое приложение потерпит крах.

EDIT: Проблема заключается не в том, чтобы делать запрос и считать его объекты. Проблема заключается в том, чтобы использовать queryForTable передавая мой запрос к cellForRowAtIndexPath моего PFQueryTableViewController

cellForRowAtIndexPath выглядит следующим образом:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? { 

    let cell:DetailApplicantCell = self.table.dequeueReusableCellWithIdentifier("reuseIdentifier") as! DetailApplicantCell 

    if let name = object?.objectForKey(self.textKey!) as? String{ 
    cell.nameLbl.text = name 
    } 
    cell.groupImage.image = UIImage(named: "People.png") 
    if let imageFile = object?.objectForKey(self.imageKey!) as? PFFile{ 
    cell.groupImage.file = imageFile 
    cell.groupImage.loadInBackground() 
    } 

    return cell 

} 

Обратите внимание, что это не cellForRow по умолчанию

+1

Где он падает и что такое журнал аварий? – Santosh

ответ

0

Вместо того, чтобы делать второй PFQuery я нашел лучший способ, используя метод PFQueryTableViewController так:

override func objectsDidLoad(error: NSError?) { 
    super.objectsDidLoad(error) 

    print("objectsDidLoad") 
     if let results = self.objects{ 
     print("objectsFound") 

     self.groupsCountLbl.text = "\(results.count)" 
     self.groupsCountLbl.fadeIn() 
    } 
} 

ВК имеет свойство objects - массив AnyObject?. С помощью функции objectsDidLoad вы определяете время, все загружается.

1

Попробуйте с query.findObjectsInBackgroundWithBlock методом и получить size() объекта ответа

 let query = PFQuery(className: self.parseClassName!) 
     query.whereKey("member", equalTo: memberId!) 
     query.findObjectsInBackgroundWithBlock { 
       (objects: [AnyObject]?, error: NSError?) -> Void in 

       if error == nil { 
        let count = objects.size() 
        label.text = "\(count)" 
        if let object = objects as? [PFObject] { 

        } 
       } else { 
        // Log details of the failure 
        print("Error: \(error!)") 
       } 
     } 
+0

Это не обходной путь? Кажется, что это делает 2 запроса вместо одного. queryForTable() просто передает запрос на cellForRowAtIndexPath – JVS

+0

Нет, это всего лишь один запрос –

+0

Я имею в виду в сочетании с тем, что в cellForRowAtIndexPath (это поведение PFQueryTableView по умолчанию) – JVS

0

Вы сила разворачивает в 2-х местах, используйте if let:

func queryForTable() -> PFQuery? { 
    if let parseClass = self.parseClassName { 
     let query = PFQuery(className: parseClass) 
     if let id = memberId { 
     query.whereKey("member", equalTo: id) 
     } 

     let count = query.countObjectsInBackground() 
     label.text = "\(count)" 
     return query 
    } 
    return nil 
} 

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

if let query = queryForTable() { 
    //your query related code here. 
} 
+0

, пожалуйста, рассмотрите мои отредактированные заметки – JVS