无法使用includekey Parse访问PFObject类型的数组

时间:2015-08-27 15:57:47

标签: ios swift parse-platform

我有PFQuery includeKey,然后我将对象传递给名为' queryArray'的数组。在函数cellForRowAtIndexPath中,我试图访问数组但没有成功。

import UIKit
import Parse

class OrdensCompraTableViewController: UITableViewController {

var queryArray: [PFObject] = [PFObject]()

override func viewDidLoad() {
    super.viewDidLoad()

    var query = PFQuery(className:"Transacao")
    query.includeKey("pointerUser")
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {
            // The find succeeded.
            println("Successfully retrieved \(objects!.count) pedidos.")
            // Do something with the found objects
            if let objects = objects as? [PFObject] {
                self.queryArray = objects     
            }
        } else {
            // Log details of the failure
            println("Error: \(error!) \(error!.userInfo!)")
        }
    }
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> OrdensCompraTableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("OrdensCompraCell", forIndexPath: indexPath) as! OrdensCompraTableViewCell

    println(queryArray)

 //     let transacao = queryArray[indexPath.row] as PFObject

 //   cell.tituloCecula.text = transacao.objectForKey("objectId") as! String

 //  var ola = transacao.relationForKey("pointerUser.username")
//println( transacao.objectForKey("aceite"))

    return cell
}

3 个答案:

答案 0 :(得分:0)

在Parse数据进入后,你从未真正重新加载tableview。而且你的numberOfRowsInSection是硬编码的,这就是为什么tableView认为数组中没有数据的原因。

if let objects = objects as? [PFObject] {

            self.queryArray = objects
            // RELOAD TABLEVIEW
            self.tableView.reloadData()

        }

要修复部分中的行数,您应该返回self.queryData.count

答案 1 :(得分:0)

首先,如果要将解析对象添加到数组中,则应将其添加到数组

 var queryArray:NSMutableArray = []

 override func viewDidLoad() {

    self.queryArray = NSMutableArray()

    ..findObjectsInBackgroundWithBlock {
    (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil {
          for object in objects {
               self.queryArray.addObject(object)
               //reload UI components
          }

然后您的numberOfSectionsInTableView应始终反映该数组中的数字:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.queryArray.count
}

答案 2 :(得分:0)

你的问题是这个行方法应该返回 self.queryArray.count *

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

在将查询数据分配给PFObject数组后,您忘记了 reloadData()

和cellForRowAtPath需要将单元格对象分配给每个indexPath.row上的数据数组