解析对象未在UITableView中检索或显示

时间:2015-08-06 16:34:26

标签: ios uitableview

我从关系指针查询解析对象,然后在UITableview中显示这些对象。但是,每当我使用我的代码进行查询时,就会显示任何内容并且它只是空白。我之前使用过这段代码来从解析中查询对象,而不是从关系中查询对象。任何有关如何查询和呈现它的帮助将非常感激。

 class MyGroupsHomePage: UITableViewController {

let cellidentifer = "MyGroupsCell"


var mygroupsdata: NSMutableArray = NSMutableArray()

func findcurrentuserobjects () {
    var currentuser = PFUser.query()
    currentuser!.whereKey("username", equalTo: PFUser.currentUser()!.username!)
    currentuser!.findObjectsInBackgroundWithBlock { (object:[AnyObject]?, error: NSError?) -> Void in
        if error == nil && object != nil {

            if let object = object as? [PFObject] {

                for objects in object {

                  let relation = objects.relationForKey("UserGroups")
                    let query = relation.query()
                    query?.findObjectsInBackgroundWithBlock({ (ob: [AnyObject]?, er: NSError?) -> Void in

                        if er == nil && ob != nil {

                            if let ob = ob as? [PFObject] {
                                for obs in ob {
                                    self.mygroupsdata.addObject(obs)
                                }
                            }      
                        }

                    })   
                }
            }
        }

        self.tableView.reloadData()   
    }    
}

override func viewDidLoad() {
    super.viewDidLoad()

    findcurrentuserobjects() 
}

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

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

GroupName对象表示我想从关系中检索的对象列。

      override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellidentifer, forIndexPath: indexPath) as! UITableViewCell
      let mygroupdata: PFObject = self.mygroupsdata.objectAtIndex(indexPath.row) as! PFObject
      cell.textLabel?.text = mygroupdata.objectForKey("GroupName")! as? String

    return cell
}

1 个答案:

答案 0 :(得分:1)

当您调用self.tableView.reloadData()时,尚未向mygroupsdata添加任何数据,因为query?.findObjectsInBackgroundWithBlock是一个立即返回的异步函数。重新加载tableview后,将向mygroupsdata添加对象的回调被取消。尝试在这里重新加载tableview:

query?.findObjectsInBackgroundWithBlock({ (ob: [AnyObject]?, er: NSError?) -> Void in

                    if er == nil && ob != nil {

                        if let ob = ob as? [PFObject] {
                            for obs in ob {
                                self.mygroupsdata.addObject(obs)
                            }
                        } 
                        self.tableView.reloadData()      
                    }

                })