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

} 

と周りの作業を試してみました。しかし、私のアプリがクラッシュします。

編集: 問題は、クエリを作成してオブジェクトを数え上げることではありません。

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 

} 

これはquery.findObjectsInBackgroundWithBlock方法では、デフォルトのcellForRow

+1

どこがクラッシュしていて、クラッシュログは何ですか? – Santosh

答えて

0

よりもむしろ二PFQueryをやって

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は、プロパティがあります。このような AnyObject?の配列。 objectsDidLoad機能を使用すると、時間が決定され、すべてがロードされます。

1

しようとしないで、という注:問題は、私のPFQueryTableViewController

cellForRowAtIndexPathはこのようになりますのcellForRowAtIndexPathに私のクエリを渡すqueryForTableを使用することです応答オブジェクトの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

これは回避策ではありませんか?これは1つではなく2つのクエリを実行しているようです。 queryForTable()は単にcellForRowAtIndexPathにクエリを渡します。 – JVS

+0

いいえそれはただ1つのクエリです –

+0

cellForRowAtIndexPathのものと組み合わせることを意味します(これはPFQueryTableViewのデフォルトの動作です) – JVS

0

あなたはif letを使用し、2箇所でアンラップ力です:

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

関連する問題