2016-08-25 26 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 

} 

但我的应用程序会崩溃。

编辑: 问题是不做一个查询并计算它的对象。问题是使用queryForTable通过我查询到的cellForRowAtIndexPathPFQueryTableViewController

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() 
    } 
} 

该VC有一个属性objectsAnyObject?的数组。 使用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