我从关系指针查询解析对象,然后在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
}
答案 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()
}
})